CREATE TABLE `binary` (
`binaryid` int(15) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`binaryid`)
);
CREATE TABLE `binarycollection` (
`binaryid` int(10) unsigned NOT NULL,
`collectionid` int(10) unsigned NOT NULL,
UNIQUE KEY `collectionid` (`collectionid`,`binaryid`),
KEY `binaryid` (`binaryid`)
);
在二进制表只能有一个存在记录到binaryid。 binarycollection表将二进制文件关联到多个集合。
我需要做的是做一个查询,它将选择二进制中的所有行,在binarycollection中有正好1个关系。
所以给出的例子:
binary:
1
2
3
4
5
6
7
binarycollection:
(binaryid collectionid)
1 1
2 1
3 1
3 2
4 1
4 2
5 2
6 2
它应该返回binaryids 1,2,5,和6
任何帮助理解。 :)
ps。这需要高效,表中包含数百万行。
@Turnkey @JérômeBoé如果我添加另一个约束,那么我想将它限制为一组collectionid。 'SELECT binaryid FROM binarycollection WHERE collectionid IN(SELECT collectionid FROM清理) GROUP BY binaryid HAVING COUNT(*)= 1' 它将失败。 – Tesco 2012-08-05 13:28:11
您可以使用ng_cleanup表进行JOIN并添加子句Where。 – 2012-08-05 13:32:19
'选择binaryid FROM binarycollection LEFT JOIN清理 使用(collectionid) WHERE cleanup.collectionid IS NOT NULL GROUP BY binaryid HAVING COUNT(*)= 1' 仍然没有工作。 它可能首先通过collectionid进行过滤,因此查询的其余部分仅在每个二进制行中看到单个二进制收集行。 – Tesco 2012-08-05 13:43:08