LEFT JOIN表查找不匹配的行,相同的表



我有一个table看起来像这样:

id int primary key
uniqueID string --not uniquely indexed
foreignKeyID int --foreignKey to another table

我要查找表中所有存在于外键1而不存在于外键2的unique id

我想我可以这样做:

SELECT * FROM table t1
LEFT JOIN table t2
ON t1.uniqueID = t2.uniqueID
WHERE 
t1.foreignKeyID = 1
AND t2.uniqueID IS NULL

然而,这从来没有给我的结果。我可以使它与NOT IN子查询一起工作,但这是一个非常大的表,所以我怀疑使用连接的解决方案会更快。

寻找构造此查询的最佳方法。

这是一个示例数据集和SQL Fiddle与工作NOT IN查询的示例,我试图转换为LEFT JOIN:

CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uniqueID` varchar(255),
`foreignKeyID` int(5) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `table` (uniqueID, foreignKeyID) VALUES ('aaa', 1), ('bbb', 1);

http://sqlfiddle.com/!9/48a3f3/4和一个不工作的LEFT JOIN我认为是等效的。

谢谢!

试试这个,如果正确理解问题似乎正在工作:

SELECT *
FROM `table` t
LEFT JOIN `table` tt ON tt.uniqueID = t.uniqueID AND tt.foreignKeyID <> 1
WHERE t.foreignKeyID = 1 AND tt.id IS NULL;

最新更新