【问题标题】:MySQL display results that were not joinedMySQL显示未加入的结果
【发布时间】:2018-07-31 20:13:41
【问题描述】:

我正在使用以下查询连接两个表:

select * from t1
LEFT JOIN t2 ON t1.First1=t2.FirstName 
and t1.Last1=t2.LastName 
and t1.City=t2.City
and t1.ST=t2.State;

现在,如何运行单独的查询来打印 t2 中未连接的行?

我尝试对字段使用 NOT IN,但收到错误:错误代码:1241。操作数应包含 1 列

select * from t2 where t2.RefID NOT IN (
select * from t1,t2 where t1.First1=t2.FirstName 
and t1.Last1=t2.LastName 
and t1.City=t2.City
and t1.ST=t2.State);

【问题讨论】:

  • "操作数应该包含 1 列" 是逻辑 t2.RefID NOT IN(select * ...) 当使用 NOT IN 时,您不能使用 *... 但是 MySQL 允许您使用此 SQL @987654324 @
  • 如果您只想显示来自 t2 的未连接或不匹配的值,您只需将 WHERE t2.anny_column IS NULL 语句添加到 LEFT JOIN 查询
  • 您的 NOT IN 失败,因为它的格式必须是 X IN (SELECT single_field...(X, Y, ...) IN (SELECT X, Y, .... 如果子查询是 SELECT t2.RefID... 可能会正常工作;但请参阅我的答案以获取可能更有效的查询。

标签: mysql tsql


【解决方案1】:

试试这个:

SELECT * FROM t2
WHERE NOT EXISTS(SELECT 1 FROM t1
                  WHERE t1.First1=t2.FirstName 
                    AND t1.Last1=t2.LastName 
                    AND t1.City=t2.City
                    AND t1.ST=t2.State);

在使用NOT IN 之前,请记住:

关于 NOT EXISTS 和 NOT IN 的最重要的一点是,与 EXISTS 和 IN 不同,它们并非在所有情况下都等价。具体来说,当涉及 NULL 时,它们将返回不同的结果。具体来说,当子查询返回一个 null 时,NOT IN 不会匹配任何行。

【讨论】:

    【解决方案2】:

    翻转连接并检查不匹配的...

    select * from t2
    LEFT JOIN t1 ON t1.First1=t2.FirstName 
    and t1.Last1=t2.LastName 
    and t1.City=t2.City
    and t1.ST=t2.State
    WHERE t1.someid IS NULL
    ;
    

    【讨论】:

    • 感谢您向我展示我也可以翻转加入!
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2014-09-02
    • 2014-02-02
    • 1970-01-01
    • 2013-11-05
    • 2012-04-03
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多