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に対して1つのレコードしか存在できません。binarycollectionテーブルは、バイナリを複数のコレクションに関連付けます。

私がする必要があるのは、binarycollectionに正確に1つの関係があるbinaryのすべての行を選択するクエリを作成することです。

したがって、例を挙げます。

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

バイナリID1、2、5、および6を返す必要があります。

どんな助けでも大歓迎です。:)

ps。これは効率的である必要があり、テーブルには数百万の行が含まれています。

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テーブルを使用して、有効な参照を確認してからgroupbinaryID

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 に答える