0

このように見える5つのテーブルを結合しようとしています

ポストテーブル

ID | 製品 | ユーザー-私たち | メイク ID | ディーラー ID | 保留中 | .... 他の 30 列 ... |

テーブルを作る

ID | 作る |

状態表

プレフィックス | 状態 | 都市 | ジップ

メンバー表

ID | 名前 | 電子メール | パスワード | zip | ディーラーID

ディーラーテーブル

ID | ディーラー名 | 都市 | 状態 | zip | 住所 | 電話

MySql クエリは次のようになります

    SELECT *
    FROM `post` AS p
        JOIN (`make` AS m, `state` AS s, `members` AS mb, `dealer` AS d)
        ON (p.Make = m.id AND p.state = s.id AND p.id = mb.id AND mb.dealer-id = d.id)
   WHERE p.pending != '1'

問題は、このクエリがmember.dealer-id = deal.id の行のみを返すことです。LEFT JOIN を使用すると、すべての正しい行が返されますが、テーブルのすべての列は、make、state、members、および deal が NULL になります。これらのテーブルの情報が必要なため、そうすべきではありません。

member.dealer-id が > 0 のdealer場合にのみテーブルに参加できますか? ディーラー テーブルに ID 0 の行を追加することもできますが、もっと良い方法があるはずです。

4

1 に答える 1

2

通常の方法で結合をコーディングしたら、テーブルLEFT JOINでのみ使用します。dealer

SELECT *
FROM post AS p
JOIN make AS m ON p.Make = m.id
JOIN state AS s ON  p.state = s.id
JOIN`members AS mb ON p.id = mb.id
LEFT JOIN dealer AS d ON mb.dealer_id = d.id
WHERE p.pending != '1'

member.dealer-idこれは、がゼロより大きい場合にのみ自動的にディーラーに参加します。

ところで、あなたのようにコード化されたクエリ結合を見たことはありません。もしそうなら、構文エラーのために実行されないと思い込んでいたでしょう - それは奇妙に見えます.

于 2013-07-31T04:57:41.847 に答える