次のモデルがあるとします。
ご覧のとおり、industry_id は null にすることができます。user.id を使用しているときに、industry.name (存在する場合)、user.description、profile.name、および project.title (すべてのプロジェクト タイトル) を 1 つの MySQL クエリで取得できますか?
はい、JOIN
2 つのテーブル:
SELECT
i.name,
u.id
FROM Industry AS i
LEFT JOIN `User` AS u ON u.industry_id = i.industry_id;
複数のテーブルの場合:
SELECT
i.Name AS InustryName,
p.Name AS UserName,
u.Description,
j.title AS ProjectTitle
FROM Industry AS i
INNER JOIN User AS u ON i.id = u.id
INNER JOIN Profile AS p ON p.user_id = u.id
INNER JOIN Project AS j ON u.id = j.user_id;
注:テーブル間で使用INNER JOIN
しました。これにより、結合されたテーブルから一致した行のみが得られます。一致しない行を含めるには、内部結合の代わりに LEFT JOIN を使用する必要がある場合があります。つまり、エントリがない業界を取得します他のテーブル。このブログ投稿を参照してください。