根据WHERE条件分离SQL SELECT结果集



使用这种查询:

SELECT userID FROM Users
WHERE (condition1)
OR    (condition2)
OR    (condition3)

我希望结果集以某种方式"区分"满足"条件1"的结果、满足"条件2"的结果和满足"条件3"的结果。

例如,通过某种方式使结果集具有第二列,该列将包含满足的条件(1,2或3)。

如何做到这一点?

谢谢。

您可以为此使用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)

注意:如果某个东西满足多个条件,这种方法不会向您显示。为此,您可能需要单独的列。

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) 

使用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)

如果条件不重叠(即互斥),则可以执行以下操作:

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

最新更新