-3

我有一个简单的 SQL 查询:

SELECT
    w.fizz
FROM
    widgets w
WHERE
    w.special_id = 2394
    AND w.buzz IS NOT NULL
    AND w.foo = 12

在伪代码中,这个WHERE子句可以被认为是:

if(specialId == 2394 && buzz != null && foo == 12)

我现在想更改此查询,使其返回所有 special_id 为 2394、buzz 不为 null、foo 为 12、special_id 为 2394、blah 为 'YES'、num 为 4 的小部件. 在伪代码中:

if(specialId == 2394 && (buzz != null && foo == 12) || (blah == "YES" && num == 4))

我尝试了以下,只是得到错误:

SELECT
    w.fizz
FROM
    widgets w
WHERE
    w.special_id = 2394
    AND
    (
        w.buzz IS NOT NULL
        AND w.foo = 12
    )
    OR
    (
        w.blah = 'YES'
        AND w.num = 4
    )

有任何想法吗?提前致谢!

4

1 回答 1

0
SELECT
    w.fizz
FROM
    widgets w
WHERE
    w.special_id = 2394
    AND
    (
        (
            w.buzz != null
            AND w.foo = 12
        )
        OR
        (
            w.blah = 'YES'
            AND w.num = 4
        )
    )

在“OR”周围添加额外的括号,因为“OR”的优先级低于“AND”。

于 2013-03-28T13:18:49.983 回答