我的表格:
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。这需要高效,表格包含数百万行。
答案 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