我有一个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;