我有以下查询:
SELECT * FROM
(
SELECT
catalog.*,
images.image
FROM `catalog` as catalog
INNER JOIN `type5` as images ON catalog.id = images.id
WHERE catalog.left_key > (SELECT `left_key` FROM `catalog` WHERE `id`=235) AND catalog.right_key < (SELECT `right_key` FROM `catalog` WHERE `id`=235)
ORDER BY catalog.left_key ASC
) ilv
此查询效果很好,但只有在表类型5中的项目ID相同时才会选择项目FROM目录。
例如在目录中我有:
id name
5 Hello
7 World
8 Foo
9 Bar
在类型5中,我有: id image
5 hello.png
8 foo.png
9 bar.png
它只会选择
5 Hello
8 Foo
9 Bar
如果在类型5中没有相同的ID,如何编辑我的查询以从目录中选择项目?
答案 0 :(得分:7)
答案 1 :(得分:2)
SELECT catalog.*, images.image
FROM `catalog` as catalog
LEFT JOIN `type5` as images
ON catalog.id = images.id
WHERE
catalog.left_key >
(SELECT `left_key` FROM `catalog` WHERE `id`=235)
AND catalog.right_key <
(SELECT `right_key` FROM `catalog` WHERE `id`=235)
ORDER BY catalog.left_key ASC
我不知道where子句试图做什么...但是为了从目录中获取所有记录以及从目录中的相关记录中获取所有记录,LEFT join就是您所需要的。我也不明白外部选择是什么......
答案 2 :(得分:2)
SELECT * FROM
(
SELECT
catalog.*,
images.image
FROM `catalog` as catalog
***LEFT OUTER*** JOIN `type5` as images ON catalog.id = images.id
WHERE catalog.left_key > (SELECT `left_key` FROM `catalog` WHERE `id`=235)
AND catalog.right_key < (SELECT `right_key` FROM `catalog` WHERE `id`=235)
ORDER BY catalog.left_key ASC
) ilv
此查询将选择与type5表连接的目录表中的所有记录。如果type5表中没有相同的id,则将为这样的对选择NULL值。
Hello - hello.png
World - NULL
关键词是 LEFT 和 OUTER 。如果您需要替换目录表中缺少的值,可以使用 RIGHT OUTER JOIN 。 要使这一切同时工作 - FULL OUTER JOIN