0

我有 3 张桌子可供选择。其中 2 个始终是必需的(tbl_notes, tbl_clients),而第 3 个是可选的(tbl_notes_categories)。

我一直LEFT JOIN在我的查询中使用与主表相关的可疑记录。

但是我没有通过下面的查询得到任何结果。

有人会指出我如何错误地使用 LEFT JOIN 吗?

SELECT n.*, c.clientname, nc.notecategoryname 
FROM tbl_notes n, tbl_clients c 
LEFT JOIN tbl_notes_categories nc ON n.categoryid = nc.categoryid 
WHERE n.clientid = c.clientid 
AND c.clientid = 12345 
ORDER BY n.dateinserted DESC

事实上,我得到了一个 sql 错误。 #1054 - 'on 子句'中的未知列 'n.categoryid'

categoryid确实存在于tbl_notes

我可能需要重新了解 JOINS 是如何工作的。我猜我之前不能有 2 个数据库表的 LEFT JOIN 吗?

附带说明一下,我可以预见会有多个必需表和几个可选表的时候。(在这种情况下tbl_notes_categories是可选的)

4

1 回答 1

0

假设该列categoryid存在于tbl_notes表中......

尝试重写查询以使用JOIN语法,而不是使用老式逗号作为连接运算符。(如果问题不是错误命名的列,我怀疑问题在于混合了两种类型的语法......但这只是一个怀疑,我没有理由测试将旧式逗号连接与JOIN关键字混合。)

我会这样写声明:

SELECT n.*, c.clientname, nc.notecategoryname 
  FROM tbl_notes n
  JOIN tbl_clients c 
    ON n.clientid = c.clientid 
  LEFT
  JOIN tbl_notes_categories nc 
    ON nc.categoryid = n.categoryid
 WHERE c.clientid = 12345
 ORDER BY n.dateinserted DESC

(实际上,我会指定要从中返回的各个列n,而不是使用n.*,但这只是样式偏好,而不是 SQL 语法要求。)

于 2013-01-28T23:12:24.567 回答