[英]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.