0

多対1の関係がすでに存在するかどうかを確認するにはどうすればよいですか?

SampleTable
╔════╦═══════╗
║ ID ║ OB_ID ║
╠════╬═══════╣
║  1 ║     1 ║
║  1 ║     2 ║
║  2 ║     3 ║
║  2 ║     1 ║
║  2 ║     2 ║
║  3 ║     1 ║
║  3 ║     3 ║
╚════╩═══════╝

SampleTable.ob_idを検索し、存在する場合はSampleTable.idを選択します。

(1,2)を検索して
1を返します。

╔════╗
║ ID ║
╠════╣
║  1 ║
╚════╝

(1,2,3)を検索して
2を返します。

╔════╗
║ ID ║
╠════╣
║  2 ║
╚════╝

(2,3)を検索すると、
空のレコードセット(またはnull)が返されます

╔════╗
║ ID ║
╚════╝
4

1 に答える 1

2
SELECT ID
FROM tableName a
WHERE ob_id IN (1,2,3)
GROUP BY ID
HAVING COUNT(*) =
            (
              SELECT COUNT(*)
              FROM TableName b
              WHERE b.ID = a.ID
            ) AND
      COUNT(*) = 3 -- the value of this depend on the number of values
                   -- you have supplied on you where clause.

ob_IDfor everyで一意の制約が定義されていない場合IDは、使用する必要がありますDISTINCT

SELECT ID
FROM tableName a
WHERE ob_id IN (1,2)
GROUP BY ID
HAVING COUNT(DISTINCT ob_id) =
            (
              SELECT COUNT(DISTINCT ob_id)
              FROM TableName b
              WHERE b.ID = a.ID
            ) AND
      COUNT(DISTINCT ob_id) = 2
于 2012-12-15T12:53:58.237 に答える