mysql - UNION 语句不起作用,被迫使用 JOIN(性能主导?)

标签 mysql sqlyog

我有两个来自不同服务器的相同表。作为识别重复 PK 的一个简短修复(为了帮助处理更长的修复,因为我们正在处理非常遗留的基础设施),我们决定让第一阶段收集一个记录列表,其主键存在于另一个数据库中,该数据库的表是相同的。即使他们有相同的 PK,他们在元组(或记录)的其余部分仍然会有不同的数据,例如名字、姓氏等。

我正在尝试使用此 UNION 语句,因为它们都是相同的表,但不断收到关于“'Where' 子句中的未知列”的错误

SELECT T.`hospitalno` AS HospitalnoMain, T.`dateencoded` AS DateEncodedMain,
    T.`firstname` AS FirstNameMain, T.`lastname` AS LastNameMain
FROM registration.`patmaster` T
UNION
SELECT P.`hospitalno` AS HospitalnoAux, P.`dateencoded` AS DateEncodedAux,
    P.`firstname` AS FirstNameAux, P.`lastname` AS LastNameAux
FROM registration.`patmaster` P
WHERE T.`LastNameMain` <> P.`LastNameAux` AND T.`FirstNameMain` <> P.`FirstNameAux`
LIMIT 100

所以我已经接受了这个提取正确数据的语句(至少通过对记录的所有调整来测试查询,它是正确的)。

SELECT * FROM 
(
    SELECT T.`hospitalno` AS HospitalnoMain, T.`dateencoded` AS DateEncodedMain,
        T.`firstname` AS FirstNameMain, T.`lastname` AS LastNameMain
    FROM registration.`patmaster` t
) AS G
LEFT OUTER JOIN
(
    SELECT P.`hospitalno` AS HospitalnoAux, P.`dateencoded` AS DateEncodedAux,
        P.`firstname` AS FirstNameAux, P.`lastname` AS LastNameAux
    FROM registration.`patmaster` p
) H
    ON G.HospitalnoMain = H.HospitalnoAux
WHERE G.`LastNameMain` <> H.`LastNameAux` AND G.`FirstNameMain` <> H.`FirstNameAux`
LIMIT 100

-- 请原谅手动输入格式。

我的问题是,哪个在性能方面更好,因为它将通过两个表提取大量数据。如果它是 UNION,那么我的 UNION 语句有什么问题,因为我尝试了 SELECT 语句的变体,这些变体一直给我相同的“未知列...”错误。提前谢谢你

编辑 另外,如果有人知道如何在“代码”中使用 SQL,我将不胜感激。它在这里似乎不起作用

最佳答案

您的 left join 没问题。 . .假设它做你想做的。但是,如果不需要,请不要在 from 子句中使用子查询。 MySQL 实现了这样的子查询,产生了额外的开销。

SELECT T.`hospitalno` AS HospitalnoMain, T.`dateencoded` AS DateEncodedMain, 
       P.`hospitalno` AS HospitalnoAux, P.`dateencoded` AS DateEncodedAux, P.`firstname` AS FirstNameAux, P.`lastname` AS LastNameAux
FROM registration.`patmaster` t INNER JOIN
     registration.`patmaster` p
  ON p.hospitalno = t.hospitalno
WHERE t.`LastNameMain` <> p.`LastName` AND t.`FirstNameMain` <> p.`FirstName`
LIMIT 100;

注意:无论如何,where 子句都会将外连接转换为内连接,因此有理由使其成为外连接。

关于mysql - UNION 语句不起作用,被迫使用 JOIN(性能主导?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37557965/

相关文章:

mysql - mysql 连接上的连接列和 where 列的索引

c# - 使用C#+MySql数据库使用Web Service的困惑

来自不同表的 MySQL 更新状态

sqlyog - 如何将 SQLYog 服务器连接迁移到另一台机器

php - 如何在 sqlyog 的 php 中建立 mysql 数据库连接

mysql - 如何在没有 URL 的情况下使用 JSON 编码数组?

mysql - 类似 isnull() 的函数来检查零值

MySQL - 尝试复制数据库期间出现 'a bulk size specified must be increased'

mysql - 想要获得佣金 SQL 表的运行总计

mysql - SQL Dump导入报错原因及解决办法