Mysql其中(in)另一个表的语句没有连接

时间:2015-12-25 23:34:46

标签: mysql select subquery where-in

我有2个表,A和B,两者都有相同的数据,因为表B也有一个'include'列。

如果表B中存在A.user_id + A.code的相同组合,其中include为1,我希望选择表中的所有a.code和a.user_id条目,然后我不想返回这些表A中的值。

首先,我尝试用此修复它:

SELECT a.code, a.user_id
LEFT JOIN B ON a.code = b.code
FROM A a WHERE b.include != 1

这不起作用,因为代码字段在表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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

试试这个

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

此解决方案等同于您的第二个查询。

答案 1 :(得分:0)

至少有两种方法可以做到这一点

排除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

或者不包括subselect

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
)

http://sqlfiddle.com/#!9/e0118c/1