我有以下 sql 语句,我想从 users 表中获取数据,其中用户 ID 不在 column_one 和 column_two 的另一个表中。
我不知道为什么这条语句会返回错误:
这个版本的 MariaDB 还不支持 'LIMIT & IN/ALL/ANY/SOME subquery'
因此,对于这个错误,我删除了 LIMIT 语句,现在它说:
操作数应包含 1 列
我可以看到 SQL 希望我在子查询中只选择一列,但这不是我想要的。
我怎样才能避免所有这些错误并通过过滤返回有效的 sql 语句?
这是我试过的 SQL 代码:
SELECT u.username, u.firstname, u.lastname,u.id,u.school
FROM users u
WHERE u.id NOT IN(
SELECT user_two,user_one FROM friends
WHERE user_one !='8'
OR user_two !='8'
)
最佳答案
从逻辑上讲,您对 IN 运算符的使用不对称
in子句的两部分必须包含相同数量的组件
你应该使用
SELECT u.username, u.firstname, u.lastname,u.id,u.school
FROM users u
WHERE u.id NOT IN(
SELECT id FROM friends
WHERE user_one !='8'
OR user_two !='8'
)
或
SELECT u.username, u.firstname, u.lastname,u.id,u.school
FROM users u
WHERE (u.id1, u.id2) NOT IN(
SELECT user_two,user_one FROM friends
WHERE user_one !='8'
OR user_two !='8'
)
或者结果是不可预测的
关于mysql - 为什么 SQL NOT IN() 运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709730/