私はMySQLで多テーブルの関係を持っています:tickets
,ticket_solutions
およびsolutions
の3つのテーブルがあります。ここで、(。チケットは複数のソリューションを有することができ、及び溶液は複数のチケットに適用)NULLが許可されている多対多リレーションシップのための左外部結合の使用
簡略テーブル構造がある:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(この例では、すべてのフィールドがVARCHAR
あるsolutions.solution
を除いINT
あります。 )一部のチケットは完了していないため、解決策がない可能性があります。
私は、次のクエリを書いている:
SELECT t.id, GROUP_CONCAT(DISTINCT sol.solution SEPARATOR ', ') solutions
FROM tickets t
LEFT JOIN ticket_solutions tsol ON (tsol.ticket_id = t.id)
LEFT JOIN solutions sol ON (tsol.solution_id = sol.id)
GROUP BY t.id DESC;
私の質問は、第二LEFT JOIN
です。指定されたチケットのリンカテーブル(ticket_solutions
)にエントリが存在する場合、は常にのレコードとなり、一致するレコードはsolutions
になります。しかし、代わりにINNER JOIN
を使用しようとすると、私はもはや解決策がないチケットを取得しません。
私の考えでは、NULL
値が発生する唯一の時間は、tickets
とリンカテーブルの関係です。 (まだ解決策のないチケットがあります)
この特定の関係にはNULL
の値がないのに、リンカーテーブルとsolutions
の間にLEFT JOIN
を使用する必要がありますか?
そうでない場合、推奨されるクエリ構造は何ですか?
これは私が探していたまさにです。ありがとうございました。 – JYelton