标签: union

有什么办法可以在同一个大表上使用 3x UNION 来加速查询?

假设下面的查询是合法的并且执行成功,有什么办法可以加快速度吗?

SELECT foo from T1 --T1 is a huge (>5e6 rows) table with no indexes
UNION
SELECT bar from T1
UNION
SELECT baz from T1
UNION
SELECT qux from T1
Run Code Online (Sandbox Code Playgroud)

上面显示的四列都是 type nvarchar(128)、非稀疏和可为空的。我使用的是 SQL Server 2008。谢谢!

编辑:提供了更多信息。我无法添加索引,因为它是 Stage 表。另外,删除DISTINCTs; 我完全忘记了这一点。

Phil:我如何将其合并为一个查询?

sql-server-2008 sql-server t-sql union

2
推荐指数
1
解决办法
3268
查看次数

WITH 子句 UNION 问题

WITH [ProgressInvoicesPeriodCost] AS
(
    SELECT
        ProgressInvoices.ProjectId
        , ProgressInvoices.PeriodId
        , SUM(ProgressInvoiceDetails.TotalThisInvoice) AS TotalThisInvoice
    FROM
        CostManagement_ProgressInvoices AS ProgressInvoices
        LEFT JOIN CostManagement_ProgressInvoiceDetails AS ProgressInvoiceDetails
            ON  ProgressInvoices.Id = ProgressInvoiceDetails.ProgressInvoiceId
    WHERE
        ProgressInvoices.ProjectId IN (@Projectlisting)

    GROUP BY
        ProgressInvoices.ProjectId
        , ProgressInvoices.PeriodId
)

[CommitmentCOPeriodCost] AS
(
    SELECT
        CommitmentCOs.ProjectId
        , CommitmentCODetails.PeriodId
        , SUM(CommitmentCODetails.AmountApproved) AS AmountApproved
    FROM
        CostManagement_CommitmentCOs AS CommitmentCOs
        LEFT JOIN CostManagement_CommitmentCODetails AS CommitmentCODetails
            ON  CommitmentCOs.Id = CommitmentCODetails.CommitmentCOId
    WHERE
        CommitmentCOs.ProjectId IN (@Projectlisting) AND CommitmentCOs.PostAsId = 2

    GROUP BY
        CommitmentCOs.ProjectId
        , CommitmentCODetails.PeriodId
)

[CommitmentPeriodCost] AS
(
    SELECT
        Commitments.ProjectId
        , CommitmentDetails.PeriodId …
Run Code Online (Sandbox Code Playgroud)

sql-server cte union

1
推荐指数
1
解决办法
149
查看次数

如何找出制造商 B 生产的所有产品(任何类型)的型号和价格

数据库方案由四个表组成:

  • 产品制造商、型号、类型
  • PC代码、型号、速度、内存、高清、CD、价格
  • 笔记本电脑代码、型号、速度、内存、高清、屏幕、价格
  • 打印机代码、型号、颜色、类型、价格

产品表包含的制造者的数据,型号和产品的类型(PCLaptop,或Printer)。假设产品表中的型号对于所有制造商和产品类型都是唯一的。

PC表中的每台个人计算机都由唯一代码明确标识,并另外通过其型号(外键指产品表)、处理器速度(以 MHz 为单位)-速度列、RAM 容量(以 Mb 为单位)- ram 进行表征、硬盘驱动器容量(以 Gb 为单位)- hd、CD-ROM 速度(例如4x)- cd及其价格

笔记本电脑桌类似于PC表,只是代替了CD-ROM的速度,它包含的屏幕尺寸(英寸) -屏幕

对于打印机表中的每个打印机型号,指定了其输出类型(y彩色和n单色)-颜色列、打印技术(LaserJet、 或Matrix)-类型 …

query union

1
推荐指数
1
解决办法
1711
查看次数

简化涉及 UNION ALL、WHERE 和 LIMIT 的查询的“重复”代码

如何简化下面显示的查询的代码?要求始终与我描述的相同,如下所示:

(select * from questions where points = 3 and type = 1 order by rand() asc limit 6)
union all
(select * from questions where points = 2 and type = 1 order by rand() asc limit 4)
union all
(select * from questions where points = 1 and type = 1 order by rand() asc limit 2)
union all
(select * from questions where points = 3 and type = 0 order by rand() asc limit 10)
union …
Run Code Online (Sandbox Code Playgroud)

mysql sql-server union

1
推荐指数
1
解决办法
408
查看次数

从“组合,任一内部连接”中获取结果

我有一种感觉,这肯定被问过多次,但我只是找不到解决方案,甚至可能因为难以解释而提出问题。

我们都知道内连接基本上给出了两个表的“交集”。因此多个内连接给出了所有表的交集。但是,我希望获得一个内部连接,该连接获得表 B 与 A表 C 与 A的交集。

对于获得所有组织的请求,我要么是主持人,要么是管理员。

SELECT *
FROM organization
INNER JOIN moderator_organization
  ON organization.id = moderator_organization.organization AND moderator_organization.user = 10
INNER JOIN admin_organization
  ON organization.id = admin_organization.organization AND admin_organization.user = 10
Run Code Online (Sandbox Code Playgroud)

然而,上面只会选择用户(ID 为 10)既是管理员又是组织者的组织,而不是其中任何一个都为真的组织。要在图表中可视化,我想:

在此处输入图片说明

红色区域是我想要请求的地方。

postgresql join database-design union

1
推荐指数
1
解决办法
303
查看次数

分组 UNION ALL

无论我如何尝试对该查询生成的记录集进行分组,它都不会这样做。查询工作正常,问题是尝试按 A 分组

SELECT     CountryCode + + ProductNumber + + StockType AS A, 
           Quantity AS B, 
           Description AS C, 
           Price AS D

FROM       dbo.vwSalesInvoiceWHandling
UNION ALL
SELECT     CountryCode + + ProductNumber + + StockType AS A,  
           Quantity AS B, 
           Description AS C, 
           Price AS D

FROM       dbo.vwSalesInvoiceWOHandling
Run Code Online (Sandbox Code Playgroud)

sql-server union

0
推荐指数
1
解决办法
4万
查看次数

对于 READ 繁重的应用程序,PostgreSQL 是否受益于更多内核或更快的内核?

我一直在试图弄清楚如何配置一个具有 64GB 内存(远大于数据库)的 PostgreSQL 实例,以及我是否应该选择更多内核或更快的内核。(假设通行证总数在 15- 20% 的差异)

一些额外的细节:最密集的 READ 将是通过大量 UNION 的 JSONB。本例中的操作系统是 CentOS 6。

postgresql performance union blob

0
推荐指数
1
解决办法
7082
查看次数

UNION 查询问题

我的查询是:

SELECT BRAND,BRAND_GROUP, SUB_BRAND ,SUM(INCOME) AS TOTAL_INCOME FROM
"tema".MMT WHERE BRAND_GROUP IS NULL AND SUB_BRAND IS NULL GROUP BY
BRAND,BRAND_GROUP,SUB_BRAND

UNION
SELECT BRAND,BRAND_GROUP, SUB_BRAND ,SUM(INCOME) AS TOTAL_INCOME FROM
"tema".BGT WHERE BRAND_GROUP IS NULL AND SUB_BRAND IS NULL GROUP BY 
BRAND,BRAND_GROUP,SUB_BRAND;
Run Code Online (Sandbox Code Playgroud)

我的输出是:

BRAND BRAND_GROUP SUB_BRAND TOTAL_INCOME 
----- ----------- --------- ------------ 
GBS   NULL        NULL             10000
SWG   NULL        NULL             10000
GBS   NULL        NULL             20000
STG   NULL        NULL             20000
GTS   NULL        NULL             30000
Run Code Online (Sandbox Code Playgroud)

问题是我有 2 类品牌,而我只想拥有 1 类。像这样:

Brand       Brand_Group     Sub_brand       Total_Income
GBS                  - …
Run Code Online (Sandbox Code Playgroud)

db2 union

0
推荐指数
1
解决办法
99
查看次数

结合 2 个 SELECT 查询并在 PostgreSQL 中打印结果

我有 2 个查询,我想将它们一起使用以向用户生成一个输出结果。输出向用户描述了从 A 到 B 的旅程。当我尝试将两个查询与UNION以下内容结合时,我不断收到语法错误:

Query failed: ERROR: syntax error at or near "UNION" LINE 6: UNION ^
Run Code Online (Sandbox Code Playgroud)

我看过一个类似的问题,但提供的解决方案和讨论似乎不起作用。

$name = pg_escape_string($_POST['name']); // Start destination from user input
$name2 = pg_escape_string($_POST['name2']); // End destination from user input

//If no results are given, the following query below will execute instead.

if (pg_num_rows($result) == 0 ) {

$query = "SELECT dt1.name as name1,dt1.time as time1,dt2.name as name2,dt2.time as time2
From departure_times as dt1
inner join departure_times as dt2 …
Run Code Online (Sandbox Code Playgroud)

postgresql php union

0
推荐指数
1
解决办法
9239
查看次数

Oracle联合默认排序很奇怪

如您所知,union删除重复的行。我认为它从后者中删除,但事实并非如此。

我发现如果没有order by子句,Oracle 会按第一列对合并的数据集进行排序并删除重复项。

select 4,5,6 from dual
union 
select 1,2,3 from dual
union 
select 4,5,6 from dual
Run Code Online (Sandbox Code Playgroud)

结果:

1   2   3
4   5   6
Run Code Online (Sandbox Code Playgroud)

而我期望:

4   5   6
1   2   3
Run Code Online (Sandbox Code Playgroud)

我在这方面失败了很多次,并使问题变得简单,就像上面的例子一样。

如何在没有 的情况下保持联合序列order by

在我的真实案例中,第一个select是完全匹配(=)结果,第二个是部分匹配(like)结果。

例如,如果我搜索罗马人

全场比赛结果:罗马,部分比赛结果:香气

当然,完整的比赛结果应该是第一位的。正如我所说,它似乎order byunion结果的第一列。

但是,如您所见:

select 'roma' from dual -- result comes out anyway..
union select 'aroma' from dual; …
Run Code Online (Sandbox Code Playgroud)

oracle order-by union

0
推荐指数
2
解决办法
5672
查看次数

子查询中带有或不带有 DISTINCT 的 UNION 查询是否等效?

考虑以下两个查询。

SELECT Col1, Col2
FROM TblA

UNION

SELECT Col1, Col2
FROM TblB
Run Code Online (Sandbox Code Playgroud)

SELECT DISTINCT Col1, Col2
FROM TblA

UNION

SELECT DISTINCT Col1, Col2
FROM TblB
Run Code Online (Sandbox Code Playgroud)

这些在逻辑上是等价的。我的问题是数据库引擎是否对它们进行了相同的处理。SQL Server 是否识别冗余并忽略DISTINCT运算符?

sql-server union distinct

0
推荐指数
1
解决办法
600
查看次数

什么是 F301:查询表达式中的 CORRESPONDING 子句?

SQL 2011 规范支持CORRESPONDING子句,

功能 F301,“CORRESPONDING在查询表达式中”:

这是什么功能?它是如何使用的?并且,它是否得到任何行业 RDBM 的支持?

select exception union sql-standard

0
推荐指数
1
解决办法
609
查看次数

CTE 与 UNION ALL 未按预期工作

下面的查询看似简单明了,但却产生了意想不到的结果。


CREATE TABLE #NUMBERS
(
    N BIGINT
);

INSERT INTO #NUMBERS VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9)
;



WITH
A AS
(   
    -- CHOOSE A ROW AT RANDOM
    SELECT   TOP 1 *
    FROM     #NUMBERS            
    ORDER BY NewID()           
),
B AS
(
    SELECT A.N AS QUANTITY, 'METERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*100 AS QUANTITY, 'CENTIMETERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*1000 AS QUANTITY, 'MILLIMETERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*1000000 …
Run Code Online (Sandbox Code Playgroud)

sql-server cte union sql-server-2017

0
推荐指数
2
解决办法
3006
查看次数