• ベストアンサー

sqlで重複チェック

yoshika_jpの回答

  • ベストアンサー
回答No.1

「自身の主キー以外」を条件に付け加えるのが堅実でしょう。 更新作業を行うのであれば当然主キーまたはそれに相当する(レコードを一意に特定できる)キーをすでに持っているはずです。 where ... and id != myId または where ... and id <> myId など

関連するQ&A

  • 重複チェックはこれでいいの?

    重複チェックはこれでいいの? VB2010とSQL Server R2で開発しています。 商品の二重登録を防ぐために重複検索をしています。 '重複チェック '■Shohin_name の重複チェック whereString = "" whereString = whereString & "Shohin_name = '" & txtShohinName.Text & "'" rtn = dbtShohin.getDoubleFind(whereString) でこの後以下のSQLに渡しています。 sql = "" sql = sql & " SELECT * " sql = sql & " FROM " sql = sql & " tbl_shohin" sql = sql & " WHERE " & whereString 当然Shohin_name はstringですし、SQL Server中は「varchar」です。 既に「ABCD」という商品が登録されているところに、「ABCD」と全角文字の商品を 登録しようとすると、重複チェックではねられてしまいます。同じものがある、といってきます。 これって、おかしくないですか? 本来半角と全角ではぜんぜん別物ですよね。 何がいけないんでしょうか? それともこういうものなんでしょうか? 教えて下さい。 よろしくお願いします。

  • 重複するレコードを調べるSQL

    重複するレコードを調べるSQL 初歩的な質問ですみません! 重複するレコードを調べるために以下のようなSQLを作ったのですが、 遅くて困っています。 もっと速くする方法があれば教えてください! 異なるカテゴリーでも商品コードが重複しているものがないかを探すSQLです。 SELECT A.商品コード, A.X, B.カテゴリー FROM (SELECT COUNT(商品コード) X, 商品コード FROM テーブルA WHERE 追加年月 = 201008 GROUP BY 商品コード) A, (SELECT 商品コード, カテゴリー FROM テーブルA WHERE 追加年月 = 201008 ) B " WHERE A.X >= 2 AND B.商品コード = A.商品コード

  • ACCESS2007で、重複チェックSQL文改編

    ACCESS2007で、重複チェックのSQL文の改編方法について教えてください。 ●フィールド内容=|会社名|郵便番号|住所|電話番号|業種| テーブル1とテーブル2を比較して、この内、|電話番号|が (1)両テーブルに存在する= SELECT テーブル1.* FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号; (2)テーブル1のみに存在する= SELECT テーブル1.* FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号 WHERE (((テーブル2.電話番号) Is Null)); (3)テーブル2のみに存在する= SELECT テーブル2.* FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.電話番号=テーブル2.電話番号 WHERE (((テーブル1.電話番号) Is Null)); 場合のSQL文が上記なのですが、この条件を |会社名|と|電話番号|の両方が一致する時(1a)(2a)(3a) と |会社名|と|電話番号|のどちらか一つが一致する時(1b)(2b)(3b) にソース改変するにはどうしたら良いでしょうか?(AND、ORを使うのだと思いますが、具体的配置位置が分かりません。。) PS1:この程度の事ならSQL文を書かずとも、ウィザードで処理できるのでしょうか? PS2:テーブル名が、[テーブル]とカッコ有る無し両パターン見ますが、どちらが正解なのでしょうか? PS3:SQL文内は、ワード間は、半角スペースに統一されているんでしょうか?それともスペース無しでもエラーは出ないんでしょうか?

  • MYSQLのストアドでの動的SQLについて

    MYSQL初心者ですが、よろしくお願いします。 MYSQL(ver5.5)でストアドプロシージャを作成しようと思います。 WEBの検索画面に入力された条件に応じて、WHERE句を動的に作成したいのです。 例えば、WEBの検索画面の検索条件に、 (1)氏名 (2)住所 (3)電話番号 があり、(1)と(3)に入力された場合は、 あるテーブルの検索条件を WHERE 氏名=入力氏名 AND 電話番号=入力電話番号 のように動的にSQLを作成したいです。 (条件に応じて、静的なSQLを使い分けるやりかたはしたくない) このような動的なSQLはストアドプロシージャで作成できのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLで他のテーブルを参照して該当個所を一発更新したい

    例えば次のような二つのテーブルがあるとします。 住所録(氏名,住所,メモ) 電話帳(氏名,電話番号) ※(住所録の氏名はキーだが電話帳の氏名はキーではない) この時、住所録テーブルに対して、 電話帳に電話番号がない名前全てについて メモに、"電話番号は不明"と言う更新をしたいのですが… UPDATE 住所録 SET メモ='電話番号は不明' WHERE … のWHERE句には何と書けばいいのか分からなくて困っています。 それともこういう時の更新はそもそも出来ないのでしょうか? 回答よろしくお願いします。

  • 初心者...アクセスの重複チェックなんですが,,,

    Access 2000 どなたか助けてください。 アクセスでtestテーブルがあって、フィールドが(名前、フリガナ、〒番号、住所、電話番号、詳細)とあるんですが、そこで、名前と電話番号が重複(空白を無視)しているレコードを削除(1件残して)して、すべてを表示させたいんですが、どなたかわかるかたいますか。お願いします。

  • SQL 重複データの抽出

    こんにちは SQLで教えてください 今 会員番号ごとの重複データがあります 例  会員番号 日付    金額 住所 その他1 その他2     1 2001/01/01  120 XXXX YYYYY  UUUUUU     1 2001/12/01  130 XXX YYYYY IIIII ⇒ 2 2001/08/12 50 pppp iiiii ooooo 3 2003/01/06 60 iiiii iiii uuuuu ⇒ 3 2002/03/18 10 22222 eeeee nnnnn 3 2001/08/19 500 ddddd rrrrr rrrrr 上記の様なデータで会員番号ごとで日付の最大のレコード(同一日なら入力順に最初)のレコードを抽出したいのですが distinctを使うと会員番号と日付のデータしか抽出されませんので その他の項目も抽出したいのですが... SQLでできなければ VB2005でもいいのですが?....   どうかよろしくお願いします。

  • 重複チェックの記述でご教授くださいませ。

    日頃はデザイン関連の作業担当なのですが、、、、 データの重複チェック方法で  会員番号と店舗番号を入力するのですが 登録画面には //会員番号重複チェック if(Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no)){ $err .= "会員NO「".$kaiin_no."」で店舗NO「".$tenpo_no."」は既に登録されています。<br />"; } としてまして、重複のエラー表示をさせています。 重複チェックの関数定義では //重複チェック2 function Duplication_Check2($kaiin_no,$tenpo_no){ global $db; $sql = "select * from store_table where kaiin_no='".$kaiin_no."' and tenpo_no=".$tenpo_no; $rst = pg_query($db,$sql); if($rst){ if(pg_num_rows($rst) = 0){ return true; }else{ return false; } }else{ return false; } } としたのですが ここに文法エラーが出ます。 初心者の質問で恐縮なのですがどこをどうすればいいのでしょうか? ご教授いただければ幸いです。

  • ACCESS重複のチェック

    ACCESSで重複チェックをしたいと思います。 現在は電話番号テーブルだけしかありません。 電話番号のテーブルを主キーを使って重複している場合エラーメッセージを出すというものです。保存ボタンもありません。 Private Sub text電話番号_BeforeUpdate(Cancel As Integer) If IsNumeric(text電話番号) = False Then '数字チェック。 MsgBox "電話番号は数字で入力して下さい。", vbCritical Cancel = True ' 処理を取り消します。 Me.Undo End If Dim strmsg As String strmsg = "重複しています" If Not IsNull(DLookup("[電話番号]", "ダブリチェックテーブル", "[電話番号] = [text電話番号]")) Then MsgBox strmsg, 16, "ダブリチェック" Cancel = True '処理を取り消します。 Me.Undo '元に戻します。 Else Cancel = False '処理を続行します。 End If End Sub これに、企業名と出発日という項目を増やしたいと思います。 ですが、何万とある電話番号を一気に入力して調べているので、一回一回企業名と出発日を入れていると生産性が落ちます。 ですので、企業名と出発日は最初の入力だけで次のレコードに移動してを継続させたいのです。そして電話番号以外にカーソルを行かないようにしたいです。 何か良い方法があればご教授お願いします。 ちなみにいろいろ自分なりに試したのですが、重複してエラーを出した場合に企業名にカーソルが飛んだししてうまくいきませんでした。

  • エクセルで重複のチェックをしたい

    初心者なので、拙い内容ですが教えてください。 ・エクセル2003 二つのシートにそれぞれA列に企業名、B列に支店名、 C列に郵便番号、D列に住所が入力されています。 二つのシートはほぼ同じ内容で、シート1は3000件の全データ、 シート2は抽出された1300件のデータが入力されています。 やりたいことは3000件のうちの1300件の重複データを シート1の全データの空白列に「重複」や  重複データには行に色をつけて表示させる、などとにかく 重複をわかりやすく表示させたいのです。 過去ログみましたが、いまいち理解できませんでしたので わかりやすく教示してくださると助かります! ちなみに二つのデータをひとつにし、フィルタオプションの 「重複するレコードは・・」は検討違いだったようでうまくいきませんでした・・ ひとつの列に対する重複チェックは理解できたのですが.. 支店によって住所が違ってくるので、たちどまってしまいました。