我正在尝试选择除 ID 为 7 的用户之外的所有用户名或电子邮件与任何用户相同的行。
但现在它返回实际具有 ID 7 的行。我在想,也许您可以对 SQL 进行一些分组来解决这个问题?
谁能告诉我怎么了?
这是我在 MySQL 中尝试使用的 SQL:
SELECT user_id FROM user WHERE username = "my_username" OR email = "my@email.com" AND user_id != 7
之前我在 SQLite3 中运行它,它可以很好地满足这个目的。但是因为 MySQL 不支持 EXCEPT 这在 MySQL 中不起作用:
SELECT COUNT(*) FROM user WHERE username = :username OR email = :email EXCEPT SELECT COUNT(*) FROM user WHERE user_id = :user_id
提前致谢!
最佳答案
在 OR 两边加上括号:
SELECT user_id
FROM user
WHERE (username = "my_username" OR email = "my@email.com")
AND user_id != 7
如果没有它们,AND
将在 OR
之前被评估,因为它有 higher priority它相当于:
SELECT user_id
FROM user
WHERE username = "my_username"
OR (email = "my@email.com" AND user_id != 7)
关于mysql - 选择所有具有 A=B 或 C=D 的行,除了 MySQL 中的 ID=foo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223035/