我有一个mysql查询,执行以下操作,
SELECT * FROM categoryTable
LEFT JOIN userMenuTable
ON userMenuTable.categoryId = categoryTable.categoryId
这只返回符合此条件的结果
ON userMenuTable.categoryId = categoryTable.categoryId
我希望能够将所有结果以及JOIN中的结果拉出来吗?
答案 0 :(得分:3)
我认为你需要FULL JOIN(mysql没有那种语法,但你可以通过UNION + LEFT + RIGHT JOIN获得所需的结果)
SELECT * FROM categoryTable
LEFT JOIN userMenuTable
ON userMenuTable.categoryId = categoryTable.categoryId
UNION
SELECT * FROM categoryTable
RIGHT JOIN userMenuTable
ON userMenuTable.categoryId = categoryTable.categoryId
答案 1 :(得分:0)
左外连接的结果(如示例所示)将包含“left”categoryTable
的所有记录,即使join-condition在“right”{{{{{{ 1}}。
另一方面,右外连接类似于左外连接,除了表的处理相反。 “右”userMenuTable
中的每一行都会在结果集中出现至少一次。
作为a1ex07 suggested in another answer,您可能看起来需要full outer join,在MySQL中可以使用userMenuTable
和UNION
之间的LEFT JOIN
进行模拟
答案 2 :(得分:0)
我认为也许你正在寻找的是一个完整的外部联接。 MySQL不支持FULL OUTER JOIN,但是你可以使用LEFT和RIGHT JOINS获得等价的东西:
SELECT * FROM categoryTable LEFT JOIN userMenuTable
ON categoryTable.categoryId = userMenuTable.categoryId
UNION ALL
SELECT * FROM categoryTable RIGHT JOIN userMenuTable
ON categoryTable.categoryId = userMenuTable.categoryId
WHERE categoryTable.categoryId IS NULL;
分享并享受。