2017-06-04 75 views
1

我有兩個表。使用SQL我想從一個名稱池中查找名稱。例如:使用兩個表中的匹配ID顯示名稱並從名稱池中返回名稱值

if foodid1 = foodID return foodName, 
if foodid2 = foodID return foodName, 
if foodid3 = foodid return foodname 

我的表是這樣的:

food table    order table 
FoodID FoodName  OrderID FoodID1 FoodID2 FoodID3 
1   chicken   1  1   2   3   
2   fish    2  3   4   5   
3   lamb    3  1   3   2    
4   pie              
5   steak           

我想返回一個值類似的查詢:

OrderID FoodID1 FooDID2 FoodID3 
1   chicken fish  lamb 
2   lamb  pie  steak 
3   chicken lamb  fish 

我能得到它,以顯示相關的ID和第一組名稱,但當我更改代碼時出現錯誤。不確定此查詢的正確語法。

SELECT [ORDER TABLE].OID, [ORDER TABLE].FID1, [FOOD TABLE].[Food Name], [ORDER TABLE].FID2 
FROM [FOOD TABLE] INNER JOIN [ORDER TABLE] ON [FOOD TABLE].[FID] = [ORDER TABLE].[FID2]; 

回答

2

你需要加入[order table][food table]三次,每次一個FoodId

SELECT  o.[OrderId], f1.[Food Name], f2.[Food Name], f3.[Food Name] 
FROM  [ORDER TABLE] o 
INNER JOIN [FOOD TABLE] f1 ON o.[FoodId1] = f1.[FoodId] 
INNER JOIN [FOOD TABLE] f2 ON o.[FoodId2] = f2.[FoodId] 
INNER JOIN [FOOD TABLE] f3 ON o.[FoodId3] = f3.[FoodId] 
1

如果您正在使用該數據結構設置,我建議Mureinik的答案,因爲它肯定給你你明確要求的結果。不過,我很好奇你爲什麼用三個不同的food_ID設置你的數據。問問你自己,以下兩個訂單有什麼不同?

1)牛排,雞,派

2)餅,牛排,雞

如果答案是否定的,你可以修改你的結構,我建議你離開FoodTable原樣,並建立Order表是這樣的:

OrderID|FoodID 
1  1 
1  2 
1  3 
2  3 
2  4 
2  5 
3  1 
3  3 
3  2 

那麼你的選擇查詢將是這樣的:

SELECT o.OrderID, f.FoodName 
FROM [Order Table] o LEFT JOIN [Food Table] f ON o.FoodID = f.FoodID 
+0

日這個答案的問題是,它排除了值爲0的字段。我試圖包括where order.fid1 = 0和order.fid1 = food.fid –

+0

你是什麼意思爲零?你的意思是空嗎? – SandPiper

+0

如果單元格爲空,則單元格被忽略,如果單元格被忽略,則它將無法顯示該行的其餘部分的值,因爲它沒有在所有單元格中的值 –