2 つの列を組み合わせた結果がすべて異なるテーブルからすべての行を取得する必要があります。したがって、同じ日に同じ価格で行われた他の販売がないすべての販売が必要です。日付と価格に基づいて一意となる販売は、アクティブ ステータスに更新されます。
だから私はこう考えています:
UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
FROM sales
HAVING count = 1)
しかし、それ以上進むと頭が痛くなってしまいます。
ベストアンサー1
SELECT DISTINCT a,b,c FROM t
は、おおよそ次のものと同等です。
SELECT a,b,c FROM t GROUP BY a,b,c
GROUP BY 構文はより強力なので、これに慣れておくことをお勧めします。
あなたのクエリについては、次のようにします:
UPDATE sales
SET status='ACTIVE'
WHERE id IN
(
SELECT id
FROM sales S
INNER JOIN
(
SELECT saleprice, saledate
FROM sales
GROUP BY saleprice, saledate
HAVING COUNT(*) = 1
) T
ON S.saleprice=T.saleprice AND s.saledate=T.saledate
)