MySQL One-to-Many:选择只存在一个关系的位置

时间:2012-08-05 12:59:43

标签: mysql select one-to-many where-clause relation

我的表格:

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`)
);

在二进制表中,只能存在一个二进制文件的记录。 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

它应该返回二进制值1,2,5和6。

感谢任何帮助。 :)

PS。这需要高效,表格包含数百万行。

3 个答案:

答案 0 :(得分:1)

使用GROUP BY

Select binaryid from binarycollection group by binaryid having count(*)=1

答案 1 :(得分:1)

它应该适用于简单的查询,因为您的引用完整性不允许在binarycollection表中重复对:

SELECT binaryid 
FROM binarycollection
GROUP BY binaryid
HAVING ( COUNT(binaryid) = 1 )

答案 2 :(得分: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