2013-04-08 47 views
0

我很難在多個查找表中纏住我的頭。我有所有的中央表中的各列中的信息,但編號:如何處理SQL初學者的多個查詢表?

db_supply (Main supplier information data table) 
----------------------------------------------- 
| Supplier_ID | Supply_Type_ID | Itm_ID | Stock | 
|-----------------------------------------------| 
| 1   | 1    | 33  | 3  | 
|-----------------------------------------------| 
| 2   | 2    | 28  | 1  | 
----------------------------------------------- 

lookup_supplier 
----------------------------- 
| Supplier_ID | Supplier_Name | 
|-----------------------------| 
| 1   | Walter  | 
|-----------------------------| 
| 2   | Jesse   | 
----------------------------- 

lookup_supply_type 
----------------------------------- 
| Supply_Type_ID | Supply_Type_Name | 
|-----------------------------------| 
| 1    | Import   | 
|-----------------------------------| 
| 2    | Delivery   | 
----------------------------------- 

lookup_itm 
------------------------ 
| Itm_ID | Itm_Name  | 
|------------------------| 
| 33  | Pickles  | 
|------------------------| 
| 28  | Burger  | 
------------------------ 

A query for 'Burger' will output this table: 
----------------------------------------------------- 
| Supplier_Name | Supply_Type_Name | Itm_Name | Stock | 
|-----------------------------------------------------| 
| Jesse   | Delivery   | Burger | 1  | 
----------------------------------------------------- 

我怎麼會真正實現這一目標?到目前爲止,我有:

SELECT * FROM db_supply WHERE Itm_ID = (SELECT Itm_ID FROM lookup_itm WHERE Itm_Name = 'Burger')

這將使我db_supply表的第二行使用標識不擡頭呢。我是否必須嵌套我的選擇來查找多個表?不知道這裏。

+0

結果你想實現什麼? – Freelancer 2013-04-08 06:34:28

+0

我希望能夠查詢項目名稱並獲得該項目的供應商,供應類型,ITM名稱和庫存列的返回。 – meiryo 2013-04-08 06:37:11

回答

1
SELECT b.Supplier_Name, 
     c.Supply_Type_Name, 
     d.Itm_Name, 
     a.Stock 
FROM db_supply a 
     INNER JOIN lookup_supplier b 
      ON a.Supplier_ID = b.Supplier_ID 
     INNER JOIN lookup_supply_type c 
      ON a.Supply_Type_ID = c.Supply_Type_ID 
     INNER JOIN lookup_itm d 
      ON a.Itm_ID = d.Itm_ID 
WHERE d.Itm_Name = 'Burger' 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

輸出

╔═══════════════╦══════════════════╦══════════╦═══════╗ 
║ SUPPLIER_NAME ║ SUPPLY_TYPE_NAME ║ ITM_NAME ║ STOCK ║ 
╠═══════════════╬══════════════════╬══════════╬═══════╣ 
║ Jesse   ║ Delivery   ║ Burger ║  1 ║ 
╚═══════════════╩══════════════════╩══════════╩═══════╝ 
+0

什麼是'b。 C。 d。一個。在SELECT子句中?我以前見過這個。編輯:有一個SQLFiddle?真棒。 – meiryo 2013-04-08 06:38:31

+0

@meiryo他們被稱爲'ALIAS'。如果您有更長的表名稱,它們很有用。 – 2013-04-08 06:39:36

+0

SQLFiddle是一款非常棒的工具,用於在線測試sql查詢':)' – 2013-04-08 06:42:13

0

嘗試以下查詢:

select b.Supplier_Name,c.Supply_Type_Name,d.itemName from db_supply a,lookup_supplier b,lookup_supply_type c,lookup_itm d where a.Supplier_ID=b.Supplier_ID and a.Supply_Type_ID=c.Supply_Type_ID and a.Itm_ID=d.Itm_ID and d.Itm_Name='Burger' 
+0

我看到你的解決方案與JW的不同。哪個有更好的表現? – meiryo 2013-04-08 06:46:10

+0

我認爲這兩個查詢都是相同的,如果你在mysql中解析這個查詢,它會自動創建INNER JOINs的語法[與JW給出的相同]。你可以使用任何它。 – Freelancer 2013-04-08 06:48:25