gpt4 book ai didi

mysql - SQL LEFT JOIN 在单个表上

转载 作者:行者123 更新时间:2023-11-29 06:36:41 24 4
gpt4 key购买 nike

假设表:

MyTable
idPrimary idPerson idSchool
-----------------------------------
1 20 6
2 20 3
3 21 2
4 22 6
5 23 6
6 24 3
7 22 7

我想找到所有上过学校 6 但没有上过学校 2 或 3 的人。这意味着根据上表,答案是学生 22 和 23。学生 20 上过学校 6但遗憾的是去了学校3,从而否定了这个学生。

根据问题矩阵38549 ,我想要 B.Key 为 NULL 的 LEFT JOIN。

(只是出于好奇,这就是所谓的 LEFT OUTER JOIN?)

主要公式为:

SELECT <SELECT_LIST> FROM TableA.A LEFT JOIN TableB.B ON A.Key = B.Key WHERE B.Key IS NULL;

表 A 将是:

SELECT * FROM `MyTable` WHERE `idSchool` = '6';

表 B 将是:

SELECT * FROM `MyTable` WHERE `idSchool` = '2' OR `idSchool` = '3';

结果表应该是:

SELECT `idPerson` FROM SELECT * FROM `MyTable` WHERE `idSchool` = '6' LEFT JOIN SELECT * FROM `MyTable` WHERE `idSchool` = '2' OR `idSchool` = '3' ON `idSchool` = `idSchool` WHERE `idSchool` = NULL;

遗憾的是 MySQL Workbench 向我抛出一个错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

靠近 LEFT JOIN,所以基本上 SQL 引擎不喜欢我的 TableA。如果我将 TableA 括在括号中,则会出现别名错误。

发出此查询的正确方法是什么?

最佳答案

执行 LEFT JOIN,检查 ON 子句中不需要的学校,并检查 WHERE 子句中是否匹配:-

SELECT DISTINCT a.idPrimary, a.idPerson, a.idSchool
FROM MyTable a
LEFT OUTER JOIN MyTable b
ON a.idPerson = b.idPerson
AND b.idSchool IN (2,3)
WHERE a.idSchool = 6
AND b.idSchool IS NULL

关于mysql - SQL LEFT JOIN 在单个表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com