我是世界上最新加入 LEFT JOIN 乐趣的人。以下工作很好:
$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");
不过,我现在想做的是引用另一个表favourite (f)
,该表只有一个公共字段cnum
with comment (c)
,而没有一个 with comment_category (cc)
。
我尝试了以下方法:
$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");
它不起作用。我猜(从我读过的内容来看)这是因为我实际上是在请求另一个 join tocomment_category (cc)
而不是 to comment (c)
。
简而言之:我如何从 A 中选择,LEFT JOIN 到 B,然后使用 B 中的字段来访问 C 中的值?
更新(由于下注者的不满):
这些表是:
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
。
我的错。对不起,所有。