• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:重複項目の抽出方法を教えてください!)

重複項目の抽出方法を教えてください!

このQ&Aのポイント
  • SQL2000とWindowsXPの環境で、重複項目を抽出する方法を教えてください。
  • Aテーブルの番号列が全て0であり、郵便番号と住所の重複を確認したい場合はどのようにすればよいでしょうか。
  • Aテーブルにおいて、住所が複数の郵便番号を持つ場合は番号列を1に、郵便番号が複数の住所を持つ場合は番号列を0に設定する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

#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.◎◎

noname#117866
質問者

お礼

jamshid6様 お礼が遅くなり申し訳ございません! 教えていただいたとおりにやったら、見事できました! ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 >SELECT文ではなく、Aテーブルを更新するという意味で、UPDATEを使用することも可能でしょうか。 その場合は、1に更新したいもの(=Aテーブルの1つの住所が複数の郵便番号をもつ)だけを対象とすればよいので、私ならばこうします。 UPDATE Aテーブル SET 番号=1 WHERE 住所 IN (SELECT 住所 FROM #WK GROUP BY 住所 HAVING COUNT(DISTINCT 郵便番号)>1)

noname#117866
質問者

お礼

いつもありがとうございます。 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テーブル.◎◎ 以上になります。教えていただけると大変助かります。よろしく御願いします。

すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

これでどうですか? 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

noname#117866
質問者

お礼

jamshid6様 いつもお世話になっております。早速試してみます! 結果はまた報告させていただきますね。 一先ずお礼まで。

noname#117866
質問者

補足

SELECT文ではなく、 Aテーブルを更新するという意味で、 UPDATEを使用することも可能でしょうか。 こちらも教えていただけると助かります!!

すると、全ての回答が全文表示されます。

関連するQ&A