1

誰かがこのクエリを解決する方法について何かアイデアがありますか?

顧客の表とライセンスの表があります。各顧客は、異なる時間に有効期限が切れる複数のライセンスを持つことができます。一部はすでに有効期限が切れており、一部はまだ有効期限が切れていません。少なくとも1つの有効なライセンスを持つすべての顧客を選択したい場合は、次のようにします。

SELECT * FROM License
LEFT JOIN Customer USING (customer_id)
GROUP BY Customer.customer_id
HAVING License.expiry > NOW()

しかし、ライセンスの有効期限が切れているだけの顧客を取得するにはどうすればよいですか?「HAVINGLicense.expiry<NOW()」を実行すると、有効期限が切れたライセンスを持つ顧客は正常に検出されますが、同時に有効なライセンスも持っている顧客は除外されません。ライセンスの有効期限が切れているだけの顧客を選択する必要があります。

「NOTHAVING」で問題は解決しますが、そんなことはありません...

どんな助けでもありがたいです。

4

1 に答える 1

0

このクエリを試してください -

SELECT * FROM License
  LEFT JOIN Customer USING (customer_id)
GROUP BY
  Customer.customer_id
HAVING
  COUNT(*) > 0 AND COUNT(*) = COUNT(IF(License.expiry > NOW(), 1, NULL))
于 2013-02-07T12:20:39.687 に答える