我最近学会了如何使用UNION ALL命令。但是,我不知道如何在连接中使用它。
有人可以告诉我如何修改下面的查询,以便它在TWO表上执行左连接 - 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
));
答案 0 :(得分:2)
如果美国和加拿大表具有相同的列名和类型,请在子选择中使用union。
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
这可以解决您的问题。