Mysql MS SQL包括';和'&';或';打断查询

Mysql MS SQL包括';和'&';或';打断查询,mysql,sql-server,database,Mysql,Sql Server,Database,我试图运行一个查询,选择db1.specific等于“OO”或“AA”的位置,但运行我的查询会中断 这是我试过的 SELECT *lots* FROM db1 INNER JOIN db2 ON db1.id = db2.id WHERE (db1.num = 2353) AND (db1.specific = 'OO') OR (db1.spec

我试图运行一个查询,选择db1.specific等于“OO”或“AA”的位置,但运行我的查询会中断

这是我试过的

SELECT        *lots*
FROM            db1 INNER JOIN
                         db2 ON db1.id = db2.id
WHERE        (db1.num = 2353) AND (db1.specific = 'OO') OR
                         (db1.specific = 'AA')
查询运行良好,返回12个条目,但没有
或
(db1.specific='AA')
。 但添加了OR语句后,它似乎运行了select*或其他什么(查询一直在进行,数千个条目)


我曾尝试放置或以其他方式放置或重新安排查询,但没有任何运气。

进行一点分组,您会成功的。试试这个

SELECT       *lots*
FROM         db1 INNER JOIN db2 ON db1.id = db2.id
WHERE        (db1.num = 2353) AND ((db1.specific = 'OO') OR (db1.specific = 'AA'))

一个小小的分组,你就会把它搞定。试试这个

SELECT       *lots*
FROM         db1 INNER JOIN db2 ON db1.id = db2.id
WHERE        (db1.num = 2353) AND ((db1.specific = 'OO') OR (db1.specific = 'AA'))

您只需要调整括号,以便操作顺序正确

SELECT *lots*
FROM db1 INNER JOIN
db2 ON db1.id = db2.id
WHERE (db1.num = 2353) AND 
(db1.specific = 'OO' OR db1.specific = 'AA')

您只需要调整括号,以便操作顺序正确

SELECT *lots*
FROM db1 INNER JOIN
db2 ON db1.id = db2.id
WHERE (db1.num = 2353) AND 
(db1.specific = 'OO' OR db1.specific = 'AA')

你想写什么样的布尔逻辑?A&B还是A&C?或者它真的是A&&B还是C?当前,如果只有C为true,则返回该行。并超越或超越了先例。在“OO”和“AA”子句周围添加括号。
的优先级高于
,这就是为什么会得到“意外”结果。用括号或:
WHERE(db1.num=2353)和(db1.specific IN('OO','AA'))
顺便说一句,
SELECT*
将获取更多的列,而不是像查询那样获取更多的行。您看到的是,
WHERE
子句中的过滤器没有按照您的预期进行过滤,原因是其他人已经指出了。(你确实说了“或什么”,但我认为理解这种区别可能有助于你理解你遇到的其他问题。)你想写什么样的布尔逻辑?A&B还是A&C?或者它真的是A&&B还是C?当前,如果只有C为true,则返回该行。并超越或超越了先例。在“OO”和“AA”子句周围添加括号。
的优先级高于
,这就是为什么会得到“意外”结果。用括号或:
WHERE(db1.num=2353)和(db1.specific IN('OO','AA'))
顺便说一句,
SELECT*
将获取更多的列,而不是像查询那样获取更多的行。您看到的是,
WHERE
子句中的过滤器没有按照您的预期进行过滤,原因是其他人已经指出了。(你确实说了“或什么”,但我认为理解区别可能有助于你理解你遇到的其他问题。)或者更确切地说,更好的括号:问题中包含的括号是多余的,这里添加的用于将
的两侧分组为
的单个参数的括号就是您所需要的。或者更确切地说,更好的括号集:问题中包含的括号是多余的,这里添加的用于将
的两侧分组为
的单个参数的括号就是您所需要的。