Mysql where (in) 语句的另一个 table 没有连接
Mysql where (in) statement of another table without joins
我有 2 个 tables,A 和 B,两者具有相同的数据期望 table B 也有一个 'include' 列。
我想 select table 中的所有 a.code 和 a.user_id 条目如果 A.user_id + A.code 的组合相同存在于 table B 中,其中 include 为 1,那么我不想 return 来自 table A 的这些值。
首先我尝试用这个修复它:
SELECT a.code, a.user_id
LEFT JOIN B ON a.code = b.code
FROM A a WHERE b.include != 1
这不起作用,因为代码字段在 table B 中多次存在,所以我得到了很多结果。
最终我想到了这个,但我不确定这是否是最好的解决方案,甚至是正确的。
SELECT a.code, a.user_id
FROM A a WHERE CONCAT(code, '-', user_id)
IN (SELECT CONCAT(code, '-', user_id) FROM b WHERE include != 1
非常感谢任何帮助!
试试这个
SELECT a.code, a.user_id
LEFT JOIN B ON a.code = b.code AND a.user_id = b.user_id
FROM A a WHERE b.include != 1
此解决方案等同于您的第二个查询。
至少有两种方法可以做到这一点
不包括 LEFT JOIN:
SELECT a.code, a.user_id
FROM A a
LEFT JOIN B
ON a.code = b.code
AND a.user_id = b.user_id
AND b.include = 1
WHERE b.user_id IS NULL
或排除子选择
SELECT a.code, a.user_id
FROM A a
WHERE NOT EXISTS (
SELECT 1
FROM B b
WHERE b.code = a.code
AND b.user_id = a.user_id
AND b.include = 1
)
我有 2 个 tables,A 和 B,两者具有相同的数据期望 table B 也有一个 'include' 列。
我想 select table 中的所有 a.code 和 a.user_id 条目如果 A.user_id + A.code 的组合相同存在于 table B 中,其中 include 为 1,那么我不想 return 来自 table A 的这些值。
首先我尝试用这个修复它:
SELECT a.code, a.user_id
LEFT JOIN B ON a.code = b.code
FROM A a WHERE b.include != 1
这不起作用,因为代码字段在 table B 中多次存在,所以我得到了很多结果。
最终我想到了这个,但我不确定这是否是最好的解决方案,甚至是正确的。
SELECT a.code, a.user_id
FROM A a WHERE CONCAT(code, '-', user_id)
IN (SELECT CONCAT(code, '-', user_id) FROM b WHERE include != 1
非常感谢任何帮助!
试试这个
SELECT a.code, a.user_id
LEFT JOIN B ON a.code = b.code AND a.user_id = b.user_id
FROM A a WHERE b.include != 1
此解决方案等同于您的第二个查询。
至少有两种方法可以做到这一点
不包括 LEFT JOIN:
SELECT a.code, a.user_id
FROM A a
LEFT JOIN B
ON a.code = b.code
AND a.user_id = b.user_id
AND b.include = 1
WHERE b.user_id IS NULL
或排除子选择
SELECT a.code, a.user_id
FROM A a
WHERE NOT EXISTS (
SELECT 1
FROM B b
WHERE b.code = a.code
AND b.user_id = a.user_id
AND b.include = 1
)