mysql - 为什么 SQL NOT IN() 运算符不起作用?

标签 mysql

我有以下 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/

相关文章:

mysql - 插入数据时,插入语句与外键约束冲突

mysql - 如何在数据库中存储产品数量

mysql - 如何增加 MySQL 中列值的出现次数

用于个性化用户访问每个站点的 MySQL 结构?

mysql - Delta 索引更新不是自动的

c# - MySQL 查询永远运行,有什么问题?

mysql - 在数据库级别处理并发问题

php - MySQL WHERE IN 返回一行

php - JSON中多行的字符串

mysql - 使用此 sql 搜索在 Rails 中构建复制关联