[英]sql, Union query
请给我5张桌子:
我想显示所有记录:
u_name|date |marketname|location|productname|description|reference
ali |12-06-2012|Aldi |DE | | TABLE |65416
sab |12-06-2013|Aldi |DE | makeup | |
sir |12-06-2010|MG |FR | | chairs |416
我们可以用工会做到这一点吗? 但是我认为,对于工会,我们应该在具有相同编号的表中具有相同的属性,或者在我的情况下,例如, cosmeticproducts
表包含的属性少于domesticproducts
。
拜托我需要你的帮忙。 我们如何才能做到这一点? 提前致谢 :)
您可以通过在select中使用null来合并具有不同/缺失列的表。
例如:
SELECT a.Column1 AS 'Col1',
a.Column2 AS 'Col2',
null AS 'Col3',
a.Column4 AS 'Col4'
FROM TableA AS a
UNION ALL
SELECT b.Column1 AS 'Col1',
b.Column2 AS 'Col2',
b.Column3 AS 'Col3',
null AS 'Col4'
FROM TableB AS b
我不知道这是否对您的特定问题有所帮助,但可以帮助您进行工会。
我们可以用工会做到这一点吗? 没有!
这是后超过 UNION
或UNION ALL
可以实现。 您期望来自不同表的数据对齐为单行。 那不是UNION所做的。
假设我们有以下信息:
users
(idu, u_name)
1 ali
commands
(idc,#userid,date)
X 1 12-06-2012
因此,我们创建以下查询:
select u_name , cast(null as date) dt
from users
UNION ALL -- union would produce the exact same result
select null, date
from commands
结果就是这样:
U_NAME DT
ali NULL
NULL 12-06-2012
2行!
然而,如果你使用JOINS
,你可能会得到更接近,此查询:
SELECT u_name , c.date
FROM users u
INNER JOIN commands c ON u.idu = c.#userid
会产生以下结果:
U_NAME DATE
ali 12-06-2012
但是 ,对于其余表来说,它要复杂得多,因为尚不清楚在所有情况下如何进行联接,而且还因为某些表可能有多个行用于联接,突然之间,您得到的行比预期的多。
现在,我们也有以下数据:
market
(idm, #userid, marketname, location)
Y1 1 ALDI DE
Y2 1 MG FR
因此,我们使用联接将其包含在查询中:
SELECT u_name , c.date, m.marketname, m.location
FROM users u
INNER JOIN commands c ON u.idu = c.#userid
INNER JOIN market m ON u.idu = m.#userid
现在我们得到以下结果:
U_NAME DATE MARKETNAME LOCATION
ali 12-06-2012 ALDI DE
ali 12-06-2012 MG FR
如果不从每个表中提供一些样本数据以及与您提供的数据相关的“预期结果”,就无法完全满足您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.