使用 UNION ALL SQL 查询获取更多值

Posted

技术标签:

【中文标题】使用 UNION ALL SQL 查询获取更多值【英文标题】:Getteing more values with UNION ALL SQL Query 【发布时间】:2012-01-03 23:59:53 【问题描述】:

我正在使用此查询从两个表中获取结果:

SELECT * FROM (
    SELECT parent_id as mID, count(*) as cnt
        FROM wp_forum_posts
        WHERE text LIKE '%$word%'
        GROUP by 1
        UNION ALL
            SELECT id, count(*)
            FROM wp_forum_threads
            WHERE subject LIKE '%$word%'
            GROUP by 1) x
ORDER BY 2, 1

我想从wp_forum_threads 中选择更多值。像subject 这样的值。 我怎样才能做到这一点? 简单地在id 后面添加是行不通的。那么查询没有返回结果。

【问题讨论】:

您的列必须匹配,但您可以用空字符串替换该 SELECT 中缺少的列。您仍然使用 AS 为它起别名。 换句话说,每个被 UNIONed 的 SELECT 中的列数必须相同。 【参考方案1】:

UNION ALL 两部分的 select 中的列数应该相同。这意味着,例如,如果您想在查询的第二部分添加“主题”,则需要在查询的第一部分添加“占位符”:

    SELECT * FROM (
SELECT parent_id as mID, NULL, count(*) as cnt
    FROM wp_forum_posts
    WHERE text LIKE '%$word%'
    GROUP by 1
    UNION ALL
        SELECT id, subject, count(*)
        FROM wp_forum_threads
        WHERE subject LIKE '%$word%'
        GROUP by 1) x
ORDER BY 2, 1

这应该可以。

【讨论】:

以上是关于使用 UNION ALL SQL 查询获取更多值的主要内容,如果未能解决你的问题,请参考以下文章

sql 查询结果合并union all用法_数据库技巧

SQL UNION 和 UNION ALL 操作符

使用 union all 分支 SQL 查询 - 性能

SQL中Union与Union All的区别

使用 Union All 优化 SQL 查询

SQL Server-聚焦UNIOL ALL/UNION查询