【问题标题】:Select Only Those Items That Appear Only In Each Table Of Two MySQL Databases仅选择仅出现在两个 MySQL 数据库的每个表中的那些项目
【发布时间】:2017-09-06 11:07:10
【问题描述】:

我有两个数据库,前段时间启动时相同。这些现在需要合并为一个。为避免重复,我想从第二个中删除两者中的条目。如果我在下面运行查询,它会自动删除重复项:-

SELECT idClient, LastName, FirstName
   FROM `ABC`.`Client`
   WHERE idClient > 1000
UNION
SELECT  idClient, LastName, FirstName
   FROM `XYZ`.`Client`
   WHERE idClient > 1000;

但是,我想要返回的唯一条目是那些重复但无法计算出实现此目的的语法的条目。

【问题讨论】:

  • MySQL 不支持 INTERSECT @RadimBača

标签: mysql sql select union


【解决方案1】:

如果你想要重复的,你可以使用exists

SELECT idClient, LastName, FirstName
FROM `ABC`.`Client` ac
WHERE idClient > 1000 AND
      EXISTS (SELECT 1
              FROM `XYZ`.`Client` xc
              WHERE xc.idClient = ac.idClient AND xc.LastName = ac.LastName AND
                    xc.FirstName = ac.FirstName AND
                    xc.idClient > 1000
             );

注意:这不会返回具有NULL 值的列。

【讨论】:

    【解决方案2】:

    使用INNER JOIN

    SELECT idClient, LastName, FirstName
    FROM `ABC`.`Client` a
    JOIN `XYZ`.`Client` b ON a.idClient = b.idClient AND a.LastName = b.LastName AND a.FirstName = b.FirstName
    WHERE a.idClient > 1000
    

    【讨论】:

    • MySQL 不支持 INTERSECT
    • @RaymondNijland 是的,我已经更新了答案。感谢您指出。
    • 不需要 "and b.idclient >1000" 因为 b.idclient 必须等于 a.idclient 而 a.idclient 必须 > 1000
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多