1

問題は、「プロパティ ID 7 が持つメーター タイプを少なくともすべて持つプロパティ (pid) を見つける」です。

p__METER と呼ばれる id と metertypes の両方を持つテーブルがあります

これは私が正しいと思ったものですが、両方の値を持つ pid だけを返すのではなく、元のプロパティだけでなく 1 つの値を持つものも返します。何か案は?この二重否定は理解するのがおかしいです。

    SELECT DISTINCT pid
    FROM property__PROPERTYMETER X
    WHERE NOT EXISTS
         (SELECT * FROM property__PROPERTYMETER Y
         WHERE pid = 7
         AND NOT EXISTS
           (SELECT * FROM property__PROPERTYMETER
           WHERE metertype = X.metertype
           AND pid = Y.pid ))
4

3 に答える 3

2

最も内側のクエリは、最も外側のプロパティが中央のプロパティのすべての metertypes を持っていることを確認する必要があります。あなたの例では、中間のプロパティに外側のプロパティのメータータイプがないことを確認します。

これで、最も内側のクエリが裏返しになりました。変化する:

       WHERE metertype = X.metertype
       AND pid = X.pid ))

に:

       WHERE metertype = Y.metertype
       AND pid = X.pid ))
于 2013-05-13T12:54:04.993 に答える
2

二重にネストされたクエリが必要です

「プロパティ ID 7 に含まれるメーター タイプのいずれも欠落していないプロパティ (pid) を見つけてください」または

「この pid にも属さない pid 7 に属するメータータイプが存在しないようなプロパティ (pid) を見つけます。」

Select DISTINCT pid           -- outer query: "Show all pids ... "
From property_PROPERTYMETER X 
Where not Exists                  -- mid-query: "Where there is no pid:7 metertype ..."
   (Select * From property_PROPERTYMETER y   
    Where metertype = X.metertype 
      And pid = 7
      And Not exists 
         (Select * from property_PROPERTYMETER -- inner Qry: "..not also in this pid."
          Where metertype = y.metertype 
            And pid = x.pid))
于 2013-05-13T13:08:37.467 に答える
0

左結合はどうですか?

  SELECT DISTINCT pid
    FROM property__PROPERTYMETER X
    WHERE NOT EXISTS
         (SELECT * FROM property__PROPERTYMETER Y
         LEFT JOIN property__PROPERTYMETER Z 
              ON Z.metertype = Y.metertype AND Z.pid = X.pid
         WHERE Y.pid = 7 AND Z.pid is null
         )
于 2013-05-13T12:54:09.060 に答える