1

削除済みとしてマークされている製品をデータベースに照会し、画像参照番号を取得してその画像を削除するphpスクリプトを作成しています。問題は、複数の製品で使用されている画像がいくつかあり、そのうちの一部だけが削除されていることです。したがって、削除された製品のすべての一意の画像番号を検索するクエリが必要ですが、削除されていない製品でも使用されていない場合に限ります。

各製品には、unquieID、ImageID、およびDeleted(削除されていない場合はnull、削除されている場合は7桁または8桁の数字が含まれています)列があります。

これは、削除された製品から画像を取得するために私が思いついたクエリです。ノートが削除された製品で製品が使用されているかどうかをクエリで確認する方法がわかりません。データベースに750000を超える製品があるため、そのチェックに対して別のクエリを実行する必要はありません。

SELECT DISTINCT ImageId 
FROM productdata 
WHERE ImageId != 0 
    AND Deleted IS NOT NULL
4

3 に答える 3

2

このクエリを使用してみてください:

SELECT ImageId
FROM productdata 
WHERE ImageId != 0 
GROUP BY ImageId
HAVING sum(CASE WHEN Deleted is null THEN 1 ELSE 0 end) = 0

ここでオンラインでテストできます:http ://www.sqlfiddle.com/#!2/15229/2

使い方:

  • GROUP BY ImageIdImageId明確な値を確実に取得する
  • sum(CASE WHEN Deleted is null THEN 1 ELSE 0 end)ImageId削除されていない特定のレコードの数です
于 2012-11-21T21:16:35.960 に答える
2

このようなものはどうですか?画像の総数を数え、それが削除された回数を数えます。削除数が画像数と一致する場合、画像の製品のすべてのインスタンスが削除されています。

SELECT 
  ImageID, 
  COUNT(ImageID) AS total_images, 
  SUM(Deleted IS not NULL) AS deleted_images
FROM productData
GROUP BY ImageID
HAVING total_images = deleted_images
于 2012-11-21T21:09:03.390 に答える
0

これは機能しますか?

SELECT DISTINCT ImageId 
FROM productdata pd
WHERE (
    SELECT COUNT(*) FROM productdata 
    WHERE pd.ImageId != ImageId AND Deleted IS NOT NULL
) = 0
于 2012-11-21T21:06:19.897 に答える