LEFT JOINの喜びに世界で最も新しい変換です。以下は、美しく働いている:XでAとBを左に結合し、YでBとCを結合する
$STH = $DBH->prepare("
SELECT cc.cat_subject, cc.cat_major, cc.cat_minor, cc.cat_name, c.cnum, c.unmod
FROM comment_category cc
LEFT JOIN comment c
ON cc.cat_subject = c.cat_subject AND cc.cat_major = c.cat_major AND cc.cat_minor = c.cat_minor
ORDER BY cc.cat_subject, cc.cat_major, cc.cat_minor");
私は今、何をしたいのか、しかし、参照のみcomment (c)
とcomment_category (cc)
となしと共通のフィールドcnum
を持つ別のテーブルfavourite (f)
です。
私は次のことを試してみました:
$STH = $DBH->prepare("
SELECT cc.cat_subject, cc.cat_major, cc.cat_minor, cc.cat_name, c.cnum, c.unmod, f.favourite
FROM comment_category cc
LEFT JOIN comment c
ON cc.cat_subject=c.cat_subject AND cc.cat_major=c.cat_major AND cc.cat_minor=c.cat_minor
LEFT JOIN favourite f
ON c.cnum=f.cnum
ORDER BY cc.cat_subject, cc.cat_major, cc.cat_minor");
それは動作しません。私はcomment (c)
ではなく、comment_category (cc)
への別の結合を実際に要求しているからです。
要約:AからLEFT JOINをBに選択するにはどうすればよいですか?Bのフィールドを使用してCの値にアクセスしますか? (不快感をパンターによる)
UPDATE:
テーブルは以下のとおりです。
comment_category
----------------
subject (int)
cat_major (int)
cat_minor (int)
name (varchar)
comment
-------
cnum (int)
subject (int)
cat_major (int)
cat_minor (int)
unmod (varchar)
favourite
---------
cnum (int)
...私はここに停止されます - お気に入りのフィールドがfavourite
表にありませんので、それがクラッシュします。
私の間違い。申し訳ありません、すべて。
あなたは次のようなものを探していますか?B.b = A.aのLEFT JOIN BでC.c = B.somethingのLEFT JOIN Cを選択します。あなたのSQLは有効に見えます。あなたはどんなエラーを出していますか? – Corbin
「それはうまくいかない」ってどういう意味ですか?エラー?返される行はありませんか? –
申し訳ありません。返される行はありません。私は質問を更新します。 – Nick