考虑这些查询(SQL Fiddle):
查询 1:
SELECT * INTO #TMP1 FROM Foo
UNION
SELECT * FROM Boo
UNION
SELECT * FROM Koo;
Run Code Online (Sandbox Code Playgroud)
查询 2:
SELECT * INTO #TMP2 FROM Foo
UNION
SELECT * FROM Boo
UNION ALL
SELECT * FROM Koo;
Run Code Online (Sandbox Code Playgroud)
请注意,Koo 与 Boo/Foo 不重叠,因此最终结果是相同的。问题是为什么第一个UNION / UNION组合没有合并成单个 SORT 操作?
怎么COLLATE用UNION?我想合并 2 个表(都具有相同的列和相同的类型:)varchar,int, int, decimal。
我收到以下错误:
sg 468, Level 16, State 9, Line 1 无法解决 UNION 操作中“Serbian_Latin_100_CI_AS”和“Croatian_CI_AS”之间的排序冲突。
我的 SQL 语句:
select * from #IA_BIH
union
select * from #IA_MNE
Run Code Online (Sandbox Code Playgroud)
我应该在哪里插入collate database_default?我尝试了不同的组合,但没有奏效。
(编辑:请参阅结尾以获得更简单的示例)
我在一个名为“cases”(135k 行,29 列)的表中搜索。此表中的某些行具有父子关系类型(不同类型),这意味着对于这些记录,必须混合使用父/子字段来过滤和显示。
我已经确定了四种不同的父子关系并为它们创建了视图:
这些视图的结果不重叠,共同覆盖了表格的 100%。
当我选择所有这些的联合并分别过滤每个视图时,查询需要大约 9 毫秒。选择所有视图的联合并过滤其结果大约需要 500 毫秒。
我还在没有视图的情况下对此进行了测试,内联了它们包含的查询,但没有产生可衡量的改进。
这是快速查询(解释):
SELECT c.*
FROM caselist_no_specials c
JOIN case_clients cacl ON cacl.case_id = c.main_id
WHERE cacl.client_id = 12046
UNION ALL
SELECT c.*
FROM caselist_disputes_with_ipr c
JOIN case_clients cacl ON cacl.case_id = c.main_id
WHERE cacl.client_id = 12046
UNION ALL
SELECT c.*
FROM caselist_mark_children c
JOIN case_clients cacl ON cacl.case_id = c.main_id
WHERE cacl.client_id …Run Code Online (Sandbox Code Playgroud) SELECT * INTO TABLE1
FROM Table2
UNION ALL
SELECT * FROM Table3;
GO
Run Code Online (Sandbox Code Playgroud)
我正在使用此查询将两个表堆叠到一个表中。这些表的列顺序应该完全相同,这样查询才能成功执行。
我想知道是否有一个技巧我们可以做到,无论列顺序如何,它都可以工作。有没有办法指示 SQL Server 按名称自动排列两个表中的列并执行UNION?
例如,在 SAS 中,诀窍是编写一个OUTER UNION CORR查询。
我在 MySQL 中的 UNION 查询有问题。我们的网站上有 1000 万玩家,我们希望选择具有多标准系统的玩家。例如,选择美国人,男性,年龄超过 35 岁。
我们正在使用“垂直分区”:每个标准 1 个表。例如:
* user_country
- id_user
- id_country
Run Code Online (Sandbox Code Playgroud)
我们想做这样的查询:
SELECT id_inscri FROM userdata_langue
WHERE id_langue='43'
UNION
SELECT id_inscri FROM userdata_sexe
WHERE sexe='2'
UNION
SELECT id_inscri FROM userdata_nb_jour
WHERE nb_jour>='31'
UNION
SELECT id_inscri FROM userdata_last
WHERE last<='2013-04-07'
AND last>='2013-04-03' ;
Run Code Online (Sandbox Code Playgroud)
我该如何优化?
- - - 更多细节
解释查询的输出:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY userdata_langue ref id_langue id_langue 1 const 398846 Using index
2 UNION userdata_sexe ref …Run Code Online (Sandbox Code Playgroud) 我使用 Postgres 13 并使用以下 DDL 定义了一个表:
CREATE TABLE item_codes (
code bytea NOT NULL,
item_id bytea NOT NULL,
time TIMESTAMP WITH TIME ZONE NOT NULL,
PRIMARY KEY (item_id, code)
);
CREATE INDEX ON item_codes (code, time, item_id);
Run Code Online (Sandbox Code Playgroud)
我使用以下查询:
SELECT DISTINCT time, item_id
FROM (
(SELECT time, item_id
FROM item_codes
WHERE code = '\x3965623166306238383033393437613338373162313934383034366139653239'
ORDER BY time, item_id
LIMIT 100)
UNION ALL
(SELECT time, item_id
FROM item_codes
WHERE code = '\x3836653432356638366638636338393364373935343938303233343363373561'
ORDER BY time, item_id
LIMIT 100)
) AS items
ORDER …Run Code Online (Sandbox Code Playgroud) postgresql execution-plan union query-performance postgresql-performance
我正在获取树中所有节点的祖父母,如下所示:
SELECT P.id, P.parent, GP.parent gp_id FROM product_groups P
INNER JOIN product_groups GP ON P.parent = GP.id
Run Code Online (Sandbox Code Playgroud)
id=0表中没有条目 with ,但有一些 where parent=0,表示树的根。此查询不会获取这些行,因为没有祖父母可以加入它们。我希望返回这些行,同时使用0(or NULL)parent和gp_id。
我打算用 到UNION第二个表(0,0),但无法弄清楚语法。这该怎么做?
我对关系代数中联合运算的结果表/关系有疑问。结果关系没有主键吗?或者它返回一个带有隐藏主键的表?
示例:假设我们取以下两个表的并集:
R1:
id | name
----------
1 a
2 b
3 c
R2:
id | name
----------
1 b
2 c
3 d
Run Code Online (Sandbox Code Playgroud)
其中属性“id”是关系 R1 和 R2 中的主键,现在这两者的并集将是:
id | name
------------
1 a
1 b
2 b
2 c
3 c
3 d
Run Code Online (Sandbox Code Playgroud)
现在,结果关系中的任何属性都不能成为主键,因为 id 和 name 都包含重复项。DBMS 如何解决这个问题?
我有一个如下所示的查询:
SELECT PubKey, Title FROM Publication
UNION
SELECT NoteKey, Title, FROM Note
Run Code Online (Sandbox Code Playgroud)
效果很好。当我尝试向其中添加 EXIST 时,我的麻烦就开始了:
SELECT PubKey, Title FROM Publication
UNION
SELECT NoteKey, Title, FROM Note
WHERE EXISTS (SELECT * FROM UserPublication WHERE UserPublication.PubKey = Publication.PubKey)
Run Code Online (Sandbox Code Playgroud)
这会引发此错误:无法绑定多部分标识符“PubKey”。
可以用另一种方式写吗?
我正在查看 TechNet 上列出的 SQL Server 物理运算符(不要判断,你知道你已经完成了)并读到哈希匹配物理运算符有时用于实现UNION逻辑运算符。
我从未见过这样做过,并想了解更多。一个示例查询会很棒。什么时候使用它,什么时候它比替代品更好?(这些通常是相同的,但并非总是如此。)
sql-server optimization execution-plan database-internals union
union ×10
sql-server ×4
optimization ×3
mysql ×2
performance ×2
postgresql ×2
collation ×1
exists ×1
join ×1
t-sql ×1
view ×1