1

我的表:

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。

任何帮助表示赞赏。:)

附言。这需要高效,表包含数百万行。

4

3 回答 3

1

使用GROUP BY

Select binaryid from binarycollection group by binaryid having count(*)=1
于 2012-08-05T13:08:08.813 回答
1

它应该解决一个简单的查询,因为您的参照完整性不允许在 binarycollection 表中重复对:

SELECT binaryid 
FROM binarycollection
GROUP BY binaryid
HAVING ( COUNT(binaryid) = 1 )
于 2012-08-05T13:17:57.370 回答
0

join它与原始binary表一起检查有效参考,group然后binaryID

SELECT  a.binaryid
FROM    `binary` a 
            INNER JOIN `binarycollection` b
                on a.binaryid = b.binaryid
GROUP BY a.binaryid
HAVING  COUNT(a.binaryid) = 1
于 2012-08-05T13:55:24.123 回答