#1,#2です。
テーブルの別名をうまく使わないと、JOINの多いクエリは複雑になるので、混乱するんだと思います。
今回はどうせ別名は必須なので、全部のテーブルを別名を使って書けばよいと思います。
SELECT
--表示するデータ
・・・
・・・
・・・
FROM Aテーブル a
LEFT OUTER JOIN Bテーブル b ON a.○○ = b.○○
LEFT OUTER JOIN Cテーブル c ON a.△△ = c.△△
INNER JOIN
(SELECT 住所,COUNT(DISTINCT 郵便番号) CNT
FROM Aテーブル
GROUP BY 住所) d ON a.住所=d.住所
WHERE a.■■='1'
ORDER BY a.◎◎
#1です。
>SELECT文ではなく、Aテーブルを更新するという意味で、UPDATEを使用することも可能でしょうか。
その場合は、1に更新したいもの(=Aテーブルの1つの住所が複数の郵便番号をもつ)だけを対象とすればよいので、私ならばこうします。
UPDATE Aテーブル
SET 番号=1
WHERE 住所 IN
(SELECT 住所 FROM #WK
GROUP BY 住所
HAVING COUNT(DISTINCT 郵便番号)>1)
質問者
お礼
いつもありがとうございます。
UPDATEについてはまだ未確認の為、改めてご報告したいと思います。
SELECT文の方なのですが、
教えていただいたほかに2箇所LEFT OUTER JOINもしている為、とても複雑になってしまい、どうしてもエラーがでてしまいます。
2箇所LEFT OUTER JOINの後に、今回教えていただいたSELECT文を挿入する方法を教えて頂けると大変助かります!
SELECT
--表示するデータ
・・・
・・・
・・・
FROM
(Aテーブル(重複件数を抽出をするAテーブルと同じ)
LEFT OUTER JOIN
Bテーブル(他テーブル)
ON
Aテーブル.○○ = Bテーブル.○○)
LEFT OUTER JOIN
Cテーブル(他テーブル)
ON
Aテーブル.△△ = Cテーブル.△△
WHERE
Aテーブル.■■='1'
ORDER BY
Aテーブル.◎◎
以上になります。教えていただけると大変助かります。よろしく御願いします。
これでどうですか?
SELECT
a.ID,a.名前,a.郵便番号,a.住所,
CASE WHEN b.CNT>1 THEN 1 ELSE 0 END 番号
FROM Aテーブル a
INNER JOIN
(SELECT 住所,COUNT(DISTINCT 郵便番号) CNT
FROM Aテーブル
GROUP BY 住所) b ON b.住所=a.住所
ORDER BY a.ID
お礼
jamshid6様 お礼が遅くなり申し訳ございません! 教えていただいたとおりにやったら、見事できました! ありがとうございました!