2017-01-01 127 views
1

我無法理解連接和子查詢以及何時使用它們。我確信其中一個在這裏是適當的。查詢多個SQL表

我有一張表(「所有者」)(爲了簡單起見)單元號,名稱和電子郵件地址。

我有另一個表格(「小部件」)的單元號和小部件分配給每個單元的數量。每個單位有0,1或2個小部件。

我需要發送一封電子郵件給每個單元,具體取決於他們是否有0,1或2個小工具。換句話說(和簡單的英語,絲毫沒有在半正確的SQL的嘗試):

select numwidgets from widgets where unit=x 
then where owners.unit = widgets.unit 
select unit, name, email 

,我需要傳遞給我的腳本看起來像這樣的數據:

unit  name   email    widgets 
1  Bob Smith  [email protected]  2 

我可以想象我需要的數據,但它是從兩個不同的表中提取出來的,這是問題所在。 「所有者」表格是永久性表格,「小部件」表格是用於跟蹤我發送的電子郵件中正在解決的特定問題的臨時表格。我不需要幫助發送電子郵件,只需創建我需要用於爲一封電子郵件提取數據(numwidgets,姓名,電子郵件)的SQL。

感謝。

編輯:

輸入數據:

owners table: 
unit, name, email 
1,Bob Smith, [email protected] 

widgets table: 
unit,widgets 
1,2 
+0

您可以發佈樣本輸入數據和問題的預期輸出? – GurV

+0

@Gurwinder預期的輸出在我的原始文章中。如果上面的數據不一樣,我只是重新排序,我不清楚你的意思是「樣本輸入數據」。預期輸出(「我需要傳遞給我的腳本的數據」)包含在數據庫中,與輸出相同,只是在不同的表中。 – CraigH

+0

不,我的意思是你需要從某些輸入數據構建的上述輸出。請發佈。 – GurV

回答

0

嘗試此,一個內,只要有兩個表中的列之間的匹配連接選擇兩個表中的所有行。

子查詢(也稱爲內部查詢或嵌套查詢)是一種用於在多個步驟中執行操作的工具。例如,如果您想獲得多列的總和,然後對所有這些值求平均值,則需要在不同的步驟中完成每個聚合。

select owners.unit, name, email, widgets.numwidgets 
from owners 
inner join widgets On owners.unit = widgets.unit 
where owners.unit = x 
+0

謝謝。這直接在數據庫上工作 - 所以技術上解決了我的問題 - 但我的PHP腳本仍然被破壞。我需要明天回覆這個,然後在我全力以赴時結束這個問題。 – CraigH

0

我想你想:

select o.*, w.widgets 
from owners o 
inner join widget w 
on o.unit = w.unit 
where o.unit = 123; 
+0

最好將條件放在'WHERE'子句中的單個表上,'ON'應該是表之間的關係(除了'OUTER JOIN')。 – Barmar

+0

謝謝@GurwinderSingh。這可能是錯誤的地方要問,但是你能解釋還是建議閱讀單字母「o」和「w」語法?這使我在其他搜索結果中感到困惑。我猜它與表名的第一個字母有關,但如果我有兩個以相同字母開頭的表 - 例如「owners」和「owners_test」,後者是「所有者」的縮寫副本,結構相同但數據不同。 – CraigH

+0

這只是表的別名。它可以是任何東西...... t,x,abcd。這是爲了方便編寫更大的連接,以便您不必一遍又一遍地編寫'very_very_big_table_name.some_column_name' – GurV

0

對於你的情況,你需要一個內部聯接。要理解你需要看到非常簡單的鍵的概念。 在您的表格中,unitnumber是兩個表格中的公共列。因此,必須根據此列應用聯接。當一個查詢的輸出被作爲輸入提供到另一個查詢即從所有者執行相關操作

選擇o.unit,o.name,o.email,w.numwidgetsö內加入

子查詢中使用在o.unit = w.unit部件w其中w.unit = X

在上面的查詢通X = 0,1,2按照結果你想

感謝

+0

謝謝。這有效,但我會接受第一個答案。 – CraigH

+0

沒問題............................ :) – user3331349