我使用left join组合了3-6个表。下面是一些关于from子句的代码示例
FROM ip_ucp_01
LEFT JOIN ip_lt_01
ON ip_ucp_01.time = ip_lt_01.time
AND ip_ucp_01.date = ip_lt_01.date
LEFT JOIN ip_le
ON ip_lt_01.time = ip_le.time
AND ip_lt_01.date = ip_le.date
LEFT JOIN ip_lmiv_01
ON ip_le.time = ip_lmiv_01.time
AND ip_le.date = ip_lmiv_01.date
LEFT JOIN ip_cwg
ON ip_lmiv_01.time = ip_cwg.time
AND ip_lmiv_01.date = ip_cwg.date
LEFT JOIN ip_mtu_01
ON ip_cwg.time = ip_mtu_01.time
AND ip_cwg.date = ip_mtu_01.date如果第二个表和第三个表中没有行,则不会显示前面的表等数据。我需要检查第二个表上的行是否存在。如果是,它将使用左连接第二个表,如果不是,它将在第三个表上使用左连接,依此类推。
发布于 2017-08-02 19:28:31
如果你只连接你的第一个表呢?如下所示:
FROM ip_ucp_01
LEFT JOIN ip_lt_01
ON ip_ucp_01.time = ip_lt_01.time
AND ip_ucp_01.date = ip_lt_01.date
LEFT JOIN ip_le
ON ip_ucp_01.time = ip_le.time
AND ip_ucp_01.date = ip_le.date
LEFT JOIN ip_lmiv_01
ON ip_ucp_01.time = ip_lmiv_01.time
AND ip_ucp_01.date = ip_lmiv_01.date
LEFT JOIN ip_cwg
ON ip_ucp_01.time = ip_cwg.time
AND ip_ucp_01.date = ip_cwg.date
LEFT JOIN ip_mtu_01
ON ip_ucp_01.time = ip_mtu_01.time
AND ip_ucp_01.date = ip_mtu_01.date由于您只在日期和时间上加入,这不就是您想要的吗?
发布于 2017-08-02 16:01:38
我认为LEFT JOIN不会像您所要求的那样工作,因为如果父表中没有条目,您将无法从孙子表中获取数据。
在我看来,您可以使用Count (不是最佳实践)来简单地使用用例,但它会解决您的问题。
发布于 2017-08-02 16:03:25
您可以对这些JOIN使用单独的SELECT查询,然后使用UNION (使用DISTINCT)将它们全部合并到一个查询中,例如:
SELECT DISTINCT column_name
FROM (
SELECT column_name
FROM ip_ucp_01
LEFT JOIN ip_lt_01 ON ip_ucp_01.time = ip_lt_01.time AND ip_ucp_01.date = ip_lt_01.date
LEFT JOIN ip_le ON ip_lt_01.time = ip_le.time AND ip_lt_01.date = ip_le.date;
UNION
SELECT column_name
FROM ip_ucp_01
LEFT JOIN ip_lmiv_01 ON ip_ucp_01.time = ip_lmiv_01.time AND ip_ucp_01.date = ip_lmiv_01.date
) a;https://stackoverflow.com/questions/45454834
复制相似问题