Основные сомнения в операторе OR

#sql

#sql

Вопрос:

Всем привет:
Я Рурк по SQL, и вот мое сомнение в использовании оператора OR. У меня есть таблица employee с 2 записями, столбец employeeid со значением 1-й строки равен 1, а значение столбца 2-й строки равно *. Мой запрос должен извлекать строку со значением столбца employeeid как 1, в противном случае он должен извлекать строки с employeeid как *. Наконец, запрос должен получить либо один набор записей, т. е. набор записей с employeeid как 1, либо набор записей с employeeid как *.

Я использовал «Выбрать * из Employee, где emp_id = ‘1’ или emp_id = ‘*’;» но результирующий набор извлекает все строки, где employeeid имеет значение 1 и *. Мне нужен только один набор записей.

Как это сделать в SQL? Заранее спасибо

Комментарии:

1. Правильно ли я понимаю, что вы хотите иметь строку с emp_id = '1' , но если она не существует, вы хотите иметь строку с emp_id = '*' ?

2. OR означает возврат всех записей, которые либо соответствуют критерию 1, либо соответствуют критерию 2, без предпочтений.

3. Да, Говард.. Это именно тот сценарий, который я ищу!

Ответ №1:

Попробуйте это:

 SELECT * 
    FROM Employee 
 WHERE emp_id = '1' 
 UNION ALL
SELECT * 
    FROM Employee 
 WHERE emp_id = '*' 
        AND NOT EXISTS 
        (
            SELECT 1 
                FROM    Employee 
             WHERE emp_id = '1' 
        )
  

Ответ №2:

 Select * 
from Employee 
where emp_id = case 
        when exists (select * from Employee where emp_id = '1') 
        then '1' 
        else '*' 
    end
  

Ответ №3:

 select top 1 * from Employee where emp_id = '1' or emp_id = '*' order by emp_id desc
  

Ответ №4:

 select * from Employee where emp_id = '1'  OR emp_id IS NOT NULL