使用这种查询:
SELECT userID FROM Users
WHERE (condition1)
OR (condition2)
OR (condition3)
我希望结果集以某种方式“区分”满足'condition1'的结果与满足'condition2'的结果和那些属于'condition3'的结果。
例如,通过某种方式使结果集具有第二列,该列将包含满足哪个条件(1,2或3)。
如何实现这一目标?
谢谢。
答案 0 :(得分:7)
您可以使用CASE
语句,例如:
SELECT userID,
case
when (condition1) then 1
when (condition2) then 2
when (condition3) then 3
end as ConditionMet
FROM Users
WHERE (condition1)
OR (condition2)
OR (condition3)
注意:如果遇到多个条件,此方法不会显示。为此,您可能需要单独的列。
答案 1 :(得分:0)
IF子句的具体语法因dbms而异,但这样的方法应该有效:
select userid,
(if (condition1) THEN 1 else 0) as COndition1,
(if (condition2) THEN 1 else 0) as COndition2,
(if (condition3) THEN 1 else 0) as COndition3
FROM table
WHERE (condition1) or (condition2) or (condition3)
答案 2 :(得分:0)
使用where子句中指定的相同条件添加一个额外的列,指示哪一个匹配。例如:
SELECT userID ,
case when condition1 then 'condition1'
when condition2 then 'condition2'
else 'condition3' end as matched
FROM Users
WHERE (condition1)
OR (condition2)
OR (condition3)
答案 3 :(得分:0)
如果条件不重叠(即排他性),那么你可以这样做:
SELECT userID, 'condition1'
FROM Users
WHERE (condition1)
UNION ALL
SELECT userID, 'condition2'
FROM Users
WHERE (condition2)
UNION ALL
SELECT userID, 'condition3'
FROM Users
WHERE (condition3)
ORDER BY userID
但是,如果用户匹配多个条件,您将获得重复项。在某些情况下,这可能很有用,但如果您需要排除重复项,则可以执行此操作:
SELECT userID, 'condition1'
FROM Users
WHERE (condition1)
UNION ALL
SELECT userID, 'condition2'
FROM Users
WHERE (condition2) AND NOT (condition1)
UNION ALL
SELECT userID, 'condition3'
FROM Users
WHERE (condition3) AND NOT (condition2) AND NOT (condition1)
ORDER BY userID