#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