我有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
。
我需要你的帮助。我们怎么能做到这一点? 在此先感谢:)
答案 0 :(得分:1)
您可以通过在select中使用空值来联合具有不同/缺少列的表。
例如:
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
我不知道这是否有助于解决您的具体问题,但应该帮助您加入工会。
答案 1 :(得分:1)
我们可以用联盟吗?不!
比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
如果不提供每张表中的一些样本数据以及与您提供的数据相关的“预期结果”,则无法完全满足您的要求。