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

时间:2012-01-04 20:59:29

标签: sql select where

使用这种查询:

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

我希望结果集以某种方式“区分”满足'condition1'的结果与满足'condition2'的结果和那些属于'condition3'的结果。

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

如何实现这一目标?

谢谢。

4 个答案:

答案 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