Mysql有可能做到以下几点吗?

时间:2010-02-12 16:36:09

标签: sql database mysql

我有一个mysql查询,执行以下操作,

SELECT * FROM categoryTable 
LEFT JOIN userMenuTable 
ON userMenuTable.categoryId = categoryTable.categoryId

这只返回符合此条件的结果

ON userMenuTable.categoryId = categoryTable.categoryId

我希望能够将所有结果以及JOIN中的结果拉出来吗?

3 个答案:

答案 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中可以使用userMenuTableUNION之间的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; 

分享并享受。