dポイントプレゼントキャンペーン実施中!

SELCTを使って違うテーブルのデータを2度使って表示させたいのですが
どのようにしたらいいのか教えてください。

----------------------
■テーブルの構成
・FoodList
NO(主キー)
Food
・MyList
NO(主キー)
fist
second
----------------------
■テーブルの内容
・FoodList
NOFood
1りんご
2みかん
3ぶどう
・MyList
NOfistsecond
123
212
321
----------------------
これで
1みかんぶどう
2りんごみかん
3みかんりんご
というように表示させたいのですが
どのようにしたらいいのでしょうか?
---------------------------------------------------------
SELECTMyLike.NO AS Expr1,FoodList.food,MyLike.Second
FROMFoodList INNER JOIN
MyLike ON FoodList.NO = MyLike.first
---------------------------------------------------------
とすると
1みかん3
2りんご2
3みかん1
となってしまいますし
---------------------------------------------------------
SELECTMyLike.NO AS Expr1,FoodList.food,MyLike.Second
FROMFoodList INNER JOIN
MyLike ON FoodList.NO = MyLike.first AND FoodList.NO=MyLike.Second
---------------------------------------------------------
とすると表示されないですし
どのようにしたら実現できるでしょうか?

教えてください。よろしくお願いします。

A 回答 (4件)

誤字がかなり多いので一旦整理しますね



---テーブル情報---
・FoodList
NO Food
1 りんご
2 みかん
3 ぶどう

・MyList
NO first second
1 2 3
2 1 2
3 2 1
---------------

正しくは以下の通りです。

--------------------------------
SELECT
MyList.No,
FoodList.Food As firstFood,
FoodList_2.Food As secondFood
FROM MyList
INNER JOIN FoodList
ON MyList.first = FoodList.No
INNER JOIN FoodList As FoodList_2
ON MyList.second = FoodList_2.No
--------------------------------

スレ主の2件目クエリーの結合順序が逆になっているのが原因ですね。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
問題解決することができました。
ありがとうございます。

お礼日時:2010/04/14 22:31

こんにちは。

下手な説明になりますが、回答させていただきます。

なぜ、
---------------------------------------------------------
SELECTMyLike.NO AS Expr1,FoodList.food,MyLike.Second
FROMFoodList INNER JOIN
MyLike ON FoodList.NO = MyLike.first
---------------------------------------------------------
↑これで、結果が

1みかん3
2りんご2
3みかん1

になってしまうかと言うと、SELECTで最後に「Second」を入れている
からです。これでは、JOINしても表示は数字になってしまいます。


正しく表示したいのであれば、

---------------------------------------------------------
SELECT MyList.NO AS Expr1,FoodList.food,FoodList.food AS FOOD_NAME
FROM FoodList INNER JOIN MyList
ON FoodList.NO = MyList.first
OR FoodList.NO = MyList.second
---------------------------------------------------------

↑のように、同じ行のSELECTをしても「FOOD_NAME」のように別名をつけていれば
問題ありません。
また、ANDで結合条件をまとめるのではなく、ORにすれば表示されなくなることも
なくなるはずです。
※冒頭SQL文に出てくる、テーブル名「MyLike」とは「MyList」のミスだと解釈し
て説明しています。


これでもし、うまく実行出来なかったらかなりお恥ずかしいです;すみません。
結果のお返事、お待ちしております。
    • good
    • 0
この回答へのお礼

丁寧に解説をいただきありがとう
ございます。
今回なぜできなかったのかよく理解できました。
ありがとうございます。

お礼日時:2010/04/14 22:30

#1ですが、やはり訂正あり。


2行目のinnerJoinは、firstでは無くてsecondでした。

SELECT MyLike.NO AS Expr1, FL1.food, FL2.food
FROM MyLike
INNER JOIN FoodList FL1 ON MyLike.first = FL1.NO
INNER JOIN FoodList FL2 ON MyLike.second = FL2.NO
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ログインできる環境ではなく今朝みさせていただき
お礼がおくれてしまいました。

おかげでできることができました。
ありがとうございます。

お礼日時:2010/04/14 22:26

2回登場する[FoodList]にエイリアスを付けて、「別なテーブル」として識別させる。



SELECT MyLike.NO AS Expr1, FL1.food, FL2.food
FROM MyLike
INNER JOIN FoodList FL1 ON MyLike.first = FL1.NO
INNER JOIN FoodList FL2 ON MyLike.first = FL2.NO

試験してないので、ちょっと怪しいかも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!