我想创建一个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
答案 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