将三表完全外部联接查询转换为MySQL
我需要将这个在SQLServer中工作的查询转换为MySQL。我已经绕着它转了至少50圈,我被难住了,甚至找不到一个起点 简而言之,问题是:将三表完全外部联接查询转换为MySQL,mysql,sql,sql-server,Mysql,Sql,Sql Server,我需要将这个在SQLServer中工作的查询转换为MySQL。我已经绕着它转了至少50圈,我被难住了,甚至找不到一个起点 简而言之,问题是: 它不是一个而是两个MySQL没有的FULL-OUTER连接。我 知道这可以通过将UNION与LEFT和RIGHT联接结合使用来模拟 它在多个条件下联接表,我不知道如何添加排除 如果执行典型的右连接 实际上,您的查询并没有进行完全的外部联接,因为这样的条件: ca.state = s_uy.state 要求匹配ca.state。也就是说,外部联接将变为
- 它不是一个而是两个MySQL没有的
连接。我 知道这可以通过将FULL-OUTER
与UNION
和LEFT
联接结合使用来模拟RIGHT
- 它在多个条件下联接表,我不知道如何添加排除
如果执行典型的
右连接
实际上,您的查询并没有进行完全的外部联接,因为这样的条件:
ca.state = s_uy.state
要求匹配ca.state
。也就是说,外部联接将变为内部联接
因此,为了从理论上回答您的问题,最简单的方法可能是在表中使用UNION
生成所有行,然后使用left join
:
FROM (SELECT reporting_period, . . .
FROM adhoc_work.Cash ca
UNION -- on purpose to remove duplicates
SELECT reporting_period, . . .
FROM adhoc_work.Summary_placed
UNION -- on purpose to remove duplicates
SELECT reporting_period, . . .
FROM adhoc_work.Summary_uy
) x LEFT JOIN
adhoc_work.Cash ca
ON x.reporting_period = ca.reporting_period AND
. . . LEFT JOIN
adhoc_work.Summary_placed s_p
ON x.reporting_period = s_p.reporting_period AND
. . . LEFT JOIN
adhoc_work.Summary_uy s_uy
ON x.reporting_period = s_uy.reporting_period AND
. . .
实际上,您的查询并没有进行完全的外部联接,因为这样的条件:
ca.state = s_uy.state
要求匹配ca.state
。也就是说,外部联接将变为内部联接
因此,为了从理论上回答您的问题,最简单的方法可能是在表中使用UNION
生成所有行,然后使用left join
:
FROM (SELECT reporting_period, . . .
FROM adhoc_work.Cash ca
UNION -- on purpose to remove duplicates
SELECT reporting_period, . . .
FROM adhoc_work.Summary_placed
UNION -- on purpose to remove duplicates
SELECT reporting_period, . . .
FROM adhoc_work.Summary_uy
) x LEFT JOIN
adhoc_work.Cash ca
ON x.reporting_period = ca.reporting_period AND
. . . LEFT JOIN
adhoc_work.Summary_placed s_p
ON x.reporting_period = s_p.reporting_period AND
. . . LEFT JOIN
adhoc_work.Summary_uy s_uy
ON x.reporting_period = s_uy.reporting_period AND
. . .
我试着沿着你建议的路走。一个障碍是,您建议的
联合
s要求联合
部分中的所有字段都相同。正如您在原始查询中所看到的,前五个左右的字段是相同的,但在这之后,它们会出现分歧。根据您的观察,原始查询并不是真正的完全外部联接
。我已经开始尝试让它们LEFT JOIN
s,我得到了一个右键但不同的答案,其中我的MySQL几乎是SQL Server答案的一个完整子集。这就是我现在的处境。在这件事上我有点不知所措。我已经试着走你建议的路了。一个障碍是,您建议的联合
s要求联合
部分中的所有字段都相同。正如您在原始查询中所看到的,前五个左右的字段是相同的,但在这之后,它们会出现分歧。根据您的观察,原始查询并不是真正的完全外部联接
。我已经开始尝试让它们LEFT JOIN
s,我得到了一个右键但不同的答案,其中我的MySQL几乎是SQL Server答案的一个完整子集。这就是我现在的处境。在这件事上我有点不知所措。