【问题标题】:UNION ALL on a Table Join表连接上的 UNION ALL
【发布时间】:2014-11-14 01:14:05
【问题描述】:

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

【问题讨论】:

    标签: php mysql union union-all


    【解决方案1】:

    如果 usa 和 canada 表具有相同的列名和类型,请在子选择中使用联合。

    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
    

    如果两个表不匹配,您可以为列名使用别名以使它们匹配,或者为缺少的列值使用常量/空值并为另一个表的名称使用别名。如果数据类型不匹配,可以使用 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
    

    这应该可以解决您的问题。

    【讨论】:

    • Yikes - 我将其标记为正确答案,但您的评论提醒我表格并不完全相同。表 gw_articles_canada 没有字段链接。如何修改您的查询以使其正常工作?
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2019-02-02
    • 2017-07-10
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多