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