ホーム>source

私はSQLに非常に慣れていません

以下のクエリを実行すると、次の結果が返されます。

<前>ウィズウィズ

結果は同じ属性を4回繰り返します!これがなぜなのか理解できず、理由がどこにも見つかりません!

3つのテーブルがあります。table1PK(image_id)は、アイテムのFKとして参照されます。アイテムPK(Item_id)は、table3のFKで参照されます。 table3には、テーブル4(account_id)およびtable2(item_id)の複合キーがあります。

私のクエリは明らかに間違っていますが、なぜかわかりません。私は誰かが結果を説明してくれることを願っています!または私を正しい方向に向けるのを助けてください!

ありがとう

SELECT table1.image_name, table1.item_id FROM table1, table2, table3 WHERE table2.catagory="item" AND table3.account_id=59 image_name image_id ------------------------- d9.jpg 89 d9.jpg 89 d9.jpg 89 d9.jpg 89 d10.jpg 90 d10.jpg 90 d10.jpg 90 d10.jpg 90 etc.....
あなたの答え
  • 解決した方法 # 1

    結合条件を指定しないため、複数の結果が得られます。外部キー関係は適切ですが、クエリに適用することを指定する必要があります。

    <前>ウィズウィズ

    最後の2つの条件に注意してください。ニーズに合わせて変更する必要があります。

  • 解決した方法 # 2

    3つのテーブルをリストしていて、そのうち2つだけを結合している。 つまり、結合から行が返され、3番目のテーブル(この場合はtable1)のすべての行に対して1回繰り返されます。

  • 解決した方法 # 3

    結合条件を明示的に指定する必要があります。そうしないと、すべてのアイテムについて3つのテーブルすべてのデカルト積が得られます59

    <前>ウィズウィズ

  • 解決した方法 # 4

    たぶん私は質問を誤解しているかもしれませんが、上記のポスターが示唆するように「Distinct」を追加することに加えて、Where句に表3と表2の関係も含める必要があると思います。あなたが述べたことから、私は以下のようなものがうまくいくと思います。テーブルの実際の構造によっては、追加の条件が必要になる場合があります。

    <前>ウィズウィズ

  • 解決した方法 # 5

    SELECT table1.image_name, table1.item_id FROM table1, table2, table3 WHERE table2.catagory="item" AND table3.account_id=59 AND table1.id = table2.item_id AND table2.item_id = table3.id を使用する必要があります  この場合、同じ情報に一致する複数の行があるためです。

    <前>ウィズウィズ

    ただし、他の人が述べているように、使用しているテーブルを結合するための条件を次のように指定する必要があります。

    <前>ウィズウィズ

    または:

    <前>ウィズウィズ where table1.image_id = table2.item_id and table2.item_id = table3.item_id and ...

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - ローカル変数と同じ名前のクラス属性に割り当てると、NameErrorが発生するのはなぜですか?