表上的UNION ALL加入

时间:2014-11-14 01:14:05

标签: php mysql union union-all

我最近学会了如何使用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
 ));

1 个答案:

答案 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

这可以解决您的问题。