我最近学习了如何使用 UNION ALL 命令。但是,我不知道如何将它与联接一起使用。
有人可以告诉我如何修改下面的查询,以便它在两个表上执行左连接 - gw_articles_usa 和 gw_articles_canada?
$stm = $pdo->prepare("SELECT WT.N, WT.URL, WT.Title,
USA.URL, USA.Brief, USA.Article, USA.Pagedex, USA.Links
FROM gw_topics WT
LEFT JOIN gw_articles_usa USA ON USA.URL = WT.URL
WHERE WT.URL = :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL
));
最佳答案
如果美国和加拿大表具有相同的列名和类型,请在子选择中使用联合。
SELECT WT.N, WT.URL, WT.Title,
COUNTRY.URL, COUNTRY.Brief, COUNTRY.Article,
COUNTRY.Pagedex, COUNTRY.Links
FROM gw_topics WT
LEFT JOIN (select * from gw_articles_usa UNION ALL select * from gw_articles_canada) COUNTRY
ON COUNTRY.URL = WT.URL
WHERE WT.URL = :MyURL
如果两个表不匹配,您可以使用列名的别名来使它们匹配,或者使用常量/null 来表示缺失的列值,并使用另一个表的名称的别名。如果数据类型不匹配,可以使用 CAST 或其他转换函数使它们相同。如果其中一个表中缺少链接,您可以执行此操作。
select URL, Brief, Article, Pagedex, Links from gw_articles_usa
UNION ALL
select URL, Brief, Article, Pagedex, null as Links from gw_articles_canada
这应该可以解决您的问题。
关于php - 表连接上的 UNION ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921417/