mysql - 选择所有具有 A=B 或 C=D 的行,除了 MySQL 中的 ID=foo

标签 mysql sql

我正在尝试选择除 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/

相关文章:

php - 两个 MySQL 服务器之间的行为差​​异(错误 1292)

mysql - MySql.Data.MySqlClient.MySqlCommand.ExecuteReader 的 DataColumn MaxLength 问题

mysql - 为什么这些查询会返回不同的结果?

java - 如何处理与主 INSERT 相关的辅助 INSERT

SQL语句构造

sql - Sequelize 非主键上的连接表

MySQL 以用户身份执行或模拟

php - 如何在另一个查询的 while 循环中运行一个 sql 查询

mysql - 插入 select 语句未被复制

sql - 在 Sequelize 后端查询中查找匹配对象