0

私は現在、次のようにTABLE A + Bの間でOUTER JOINを正常に実行しています。

SELECT * FROM player_img
  LEFT OUTER JOIN user_play
  ON player_img.player_img_id = user_play.user_play_entry_player_img_id
  AND user_play.user_play_uid = 1
  WHERE player_img.player_img_id IS null

これにより、TABLE Bからの参照を持たないTABLE Aからのすべての結果が得られますuser_play_uid = 1

テーブル A には、他のテーブルを参照する属性があります。これらのフィールドも照会しようとしています。テーブル参照の簡単な例:

TABLE_A:
player_img_id (unique key)
player_img_player_id (reference to: TABLE_C "player_id")
player_img_category_id (reference to: TABLE_D "category_id")

TABLE_B:
user_play_entry_player_img_id (reference to TABLE_A: "player_img_id")
user_play_uid (reference to table with user.id)

TABLE_C:
player_id (unique key)
player_country (reference to table with country.id)
player_league (reference to table with league.id)

TABLE_D:
category_id (unique key)

次の方法に沿って何かを行うことができると考えました(もちろん、まったく機能しません)

SELECT u . * , up . * , pi . * , p . * , c . *
  FROM user u, user_play up, player_img pi, player p, country c
  LEFT OUTER JOIN up
  ON pi.player_img_id = up.user_play_entry_player_img_id
  WHERE pi.player_img_id IS null
  AND up.user_play_uid = $this->user_id
  AND pi.player_img_category_id = $this->category_id
  AND pi.player_img_player_id = p.player_id
  AND p.player_country = c.country_id

OUTER JOIN と参照ルックアップ テーブルを組み合わせる方法について何か提案はありますか?

編集: 以下の提案による現在の試み - クエリは実行されていますが、結果が表示されていません - アイデア?:/

SELECT u . * , up . * , pi . * , p . * , c . *
  FROM user u
  INNER JOIN player_img pi
  ON pi.player_img_category_id  = 3
  INNER JOIN player p
  ON pi.player_img_player_id    = p.player_id
  INNER JOIN country c
  ON p.player_country           = c.country_id
  LEFT OUTER JOIN user_play up
  ON pi.player_img_id = up.user_play_entry_player_img_id
  WHERE pi.player_img_id IS null
  AND up.user_play_uid      != 1
4

1 に答える 1

0

使用している古い構文の代わりに、ANSI-92JOIN構文を使用します。

SELECT u . * , up . * , pi . * , p . * , c . *
FROM user u
INNER JOIN player_img     pi ON ...
INNER JOIN player          p ON pi.player_img_player_id = p.player_id
INNER JOIN country         c ON p.player_country        = c.country_id
LEFT OUTER JOIN user_play up ON pi.player_img_id    = up.user_play_entry_player_img_id
WHERE pi.player_img_id IS null
  AND up.user_play_uid = $this->user_id

注意事項:

  • クエリにJOINは、テーブルplayer_img piを他のテーブルと一緒に使用する方法に関する条件はありません。

  • この場合、その条件をそのテーブルではなくサブクエリに移動する必要がある可能性があるため、条件AND up.user_play_uid = $this->user_idによって、mcatch されていない行が削除される可能性があります。LEFT JOINLEFT OUTER JOIN

于 2013-09-04T09:59:30.370 に答える