SQL语句。如果一个或多个条件为真,则返回行

时间:2018-11-15 10:46:06

标签: sql conditional-statements where-clause

我想创建一个SQL语句,如果WHERE子句中的一个或多个条件为true,则返回行。您可以在下面看到SQL语句。现在的问题是所有条件都必须为真。如果我将AND替换为OR,它将仍然无法工作,因为查询将不会返回2或3个条件为真的行。 我知道我可以用UNION解决这个问题。但这对性能不利。有人有更好的解决方案吗?

SELECT W*.
FROM WORK W JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE W.COLUMN1 IS NOT NULL
  AND (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1)
  AND WS.WORKID != -1

2 个答案:

答案 0 :(得分:0)

因为如果where子句中的一个条件为true,则需要返回所有行,所以只有一个选项可以使用OR而不是AND。 试试这个:

SELECT W*.
FROM WORK W JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE W.COLUMN1 IS NOT NULL
 OR (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1)
 OR  WS.WORKID != -1

答案 1 :(得分:0)

您也许可以简化它。

SELECT W.*
FROM WORK W 
JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE (W.COLUMN1 IS NOT NULL OR W.COLUMN2 != -1 OR W.ID != -1)

或反转正数。

SELECT W.*
FROM WORK W 
JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE NOT (W.COLUMN1 IS NULL AND W.COLUMN2 = -1 AND W.ID = -1)

请注意,WHERE W.COLUMN2 != -1不会选择为空的W.COLUMN2
因此WHERE (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1)返回的内容与WHERE W.COLUMN2 != -1