簡體   English   中英

sql,聯合查詢

[英]sql, Union query

請給我5張桌子:

  • 化妝品(idp,產品名稱,#idc)
  • domesticproducts(IDDP,描述中,參考,#IDC)
  • 用戶(idu,u_name)
  • 命令(IDC,#用戶ID,日期)
  • 市場(IDM,#用戶ID,市場名稱,位置)

我想顯示所有記錄:

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

我不知道這是否對您的特定問題有所幫助,但可以幫助您進行工會。

我們可以用工會做到這一點嗎? 沒有!

超過 UNIONUNION 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM