2017-06-04 3 views
1

2つのテーブルがあります。 SQLの使用名前の1つのプールから名前を探したいと思います。例えば:私はそれは、関連IDを表示するために得ることができ2つのテーブルの一致するIDを使用して名前を表示し、1つのプールから名前の値を返す

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

:私のような値のものを返すクエリをしたい

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           

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

は私のテーブルは次のようになり名前の最初のセットですが、コードを変更するとエラーが発生します。このクエリの正しい構文については不明です。

あなたは一度、各 FoodIdため、 [food table]三回に [order table]に参加する必要があり
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

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の答えをお勧めしますあなたが明示的に求めた結果。しかし、なぜ3つの異なるfood_IDを使用してデータを設定したのか不思議です。以下の2つのオーダーは違うのですか?

1)ステーキ、チキン、パイ

2)パイ、ステーキ、チキン

答えは何であり、あなたがあなたの構造を変更することができるならば、私は、あるとしてあなたはFoodTableを残してお勧めしないだろうこのような注文テーブルを設定:

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の値を持つフィールドを除外しているということです。order.fid1 = 0とorder.fid1 = food.fidのどこに含めるかを試しています。 –

+0

0をどういう意味ですか? nullを意味しますか? – SandPiper

+0

セルがnullの場合、セルは無視され、セルが無視されると、すべてのセルに値がないため、残りの行の値が表示されません –

関連する問題