[英]Joining two tables on column A or column B in SQL
我有两个表,称为计划和实际。 每个表中的每一行都代表一个唯一的项目,我需要找到计划表中的项目,而不是实际表中的项目,反之亦然。
有三列唯一地标识每个项目,并且这些列中的每一列的值可能为也可能不为空。
例如:
说“计划”看起来像这样:
ID_1 ID_2 ID_3
aaa Null Null
Null 111 Null
Null Null 123
bbb 222 Null
ccc Null 456
Null 333 789
ddd 444 202
说“实际”看起来像这样:
ID_1 ID_2 ID_3
aaa Null Null
Null 111 Null
bbb 222 Null
Null 333 789
Null 555 Null
eee Null 303
使用 SQL,我如何识别“在计划中而不是在实际中”的行:
Null Null 123
ccc Null 456
ddd 444 202
在“实际上不在计划中”的行中:
Null 555 Null
eee Null 303
感谢您的帮助!
您可以使用 LEFT JOIN。 下面是 MySql 的例子。
计划中不实际
SELECT Plan.* FROM Plan
LEFT JOIN Actual ON (Plan.ID_1 = Actual.ID_1 AND Plan.ID_2 = Actual.ID_2 AND Plan.ID_3 = Actual.ID_3)
WHERE Actual.ID_1 IS NULL AND Actual.ID_2 IS NULL AND Actual.ID_3 IS NULL;
实际上不在计划中
SELECT Actual.* FROM Actual
LEFT JOIN Plan ON (Plan.ID_1 = Actual.ID_1 AND Plan.ID_2 = Actual.ID_2 AND Plan.ID_3 = Actual.ID_3)
WHERE Plan.ID_1 IS NULL AND Plan.ID_2 IS NULL AND Plan.ID_3 IS NULL;
如果您使用 ORACLE,则可以使用运算符 MINUS。 它将选择表“计划”中的行而不是“实际”表中的行。
SELECT ID_1, ID_2, ID_3
FROM Plan
MINUS
SELECT ID_1, ID_2, ID_3
FROM Actual;
如果您使用的是 SQL Server; 使用 EXCEPT 而不是减号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.