• ベストアンサー

ID番号がnullのデータを削除する方法は?

+------+----------+----------------+----------+ | id | name | address | hobby | +------+----------+----------------+----------+ | 1 | 武田信玄 | 山梨県甲府市 | NULL | | 2 | 毛利元就 | 広島県広島市 | NULL | | NULL | NULL | NULL | 2 | | NULL | NULL | NULL | 1 | +------+----------+----------------+----------+ というテーブルBUSHOがあります。 この表の3行目4行目のデータを削除したいので、 mysql> delete from BUSHO where id="null"; とすると、 Query OK, 0 rows affected (0.08 sec) となってデータは削除されません。 (id=null; id="NULL"; でもできません。) idがnullの場合のデータ削除はどのように行うのでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

話はかわりますが、SQLなんですからIDには PRIMARY KEYを設定して厳密に管理したほうが よいとおもいます。

spindle
質問者

お礼

有難うございます。ハッと気づかされました。なるほど、そういうことなのですね。大変貴重なご指摘で大いに勉強になりました。心に留めておきます。

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

その他の回答 (3)

回答No.4

前回も、デタラメなSQLの記述をして、基本的な使い方を質問していましたが、自分でマニュアルやインターネットで調べる気はないということですか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=1905296 今回の場合は、以下のSQLになります。 delete from BUSHO where id in null

spindle
質問者

お礼

お叱りを受けましたが、参考書で調べても解らないから聞いているのです。初心者は、参考書に書いてあることでも、今一、解らない点があります。あなたが、勉強し始めたときは如何でしたでしょうか。 今回のご回答も含め、各諸先輩のご回答のお陰で、参考書と照らし合わせ、「なるほど、そういうことか。この点は注意すべき重要点か。」と納得し、理解を深め、意識に定着させることができました。あまり短気にならず、今後とも初心者のご指導もよろしくお願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

#1どの >ちなみに、Notの場合は数値などと異なり、 >id is not null >です。 >not( id='1') のように not id is null では駄目。 数値などと同じように、 not(id is null) 書けば通ると思いますよ? (どうして数値等の比較式ではカッコを使うのに、null条件には使ってあげないの?)

spindle
質問者

お礼

なるほど、良くわかりました。有難うございました。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Oracleときっと同じでしょう、ということで自身なし。 Where条件で NULL を使用するならISです。 id is null ちなみに、Notの場合は数値などと異なり、 id is not null です。 not( id='1') のように not id is null では駄目。

spindle
質問者

お礼

ありがとうございます。良くわかりました。

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

関連するQ&A

  • ID番号を指定して、行にデータを追加する方法は?

    +------+----------+----------------+----------+ | id | name | address | hobby | +------+----------+----------------+----------+ | 1 | 武田信玄 | 山梨県甲府市 | NULL | | 2 | 毛利元就 | 広島県広島市 | NULL | +------+----------+----------------+----------+ というテーブルがあります。 カラムhobby[int型]にデータを追加するため、 mysql> insert into BUSHOU(hobby) values('2'),('1'); とすると、 +------+----------+----------------+----------+ | id | name | address | hobby | +------+----------+----------------+----------+ | 1 | 武田信玄 | 山梨県甲府市 | NULL | | 2 | 毛利元就 | 広島県広島市 | NULL | | NULL | NULL | NULL | 2 | | NULL | NULL | NULL | 1 | +------+----------+----------------+----------+ となってしまいます。 mysql> insert into BUSHO(hobby) where id 1 values('2'); とするとsyntaxエラーになります。 カラムhobby[int型]にデータを追加するためには、どうすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • Access で重複データを削除

    Access2010を使用しています。フィールドが2個あります。【都道府県名フールド】【市区町村名フィールド】です。 都道府県フールドには、重複データが有ります。【東京都 品川区】【 東京都 大田区】【千葉県 市川市】【千葉県 船橋市】・・・・】このような重複データがある時に、エクセルの【データ 重複の削除】の様な結果が欲しい。実行後は【東京都 品川区】【千葉県 市川市】です。*エクセルの重複の削除は最初の行が残ると有りました。簡単な方法をお願い致します。現在実施している方法はアクセスで、エクセルでエクスポートして、【データ データの削除】を実施しています。 ※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。

  • Excelマクロでチェックボックスを不定数表示する

    Excelマクロの勉強中です。 マクロで封筒の宛名印刷をしたいと考えています。 Excelシートの内容は下のような感じです。 --------------------------------------------------- 整理番号 氏名  郵便番号  県   市町村 00001 徳川家康 000-0000 愛知県 ○○市・・・ 00002 武田信玄 000-0000 山梨県 ○○市・・・ 00003 豊臣秀吉 000-0000 愛知県 ○○市・・・ 00004 上杉謙信 000-0000 新潟県 ○○市・・・ 00005 伊達正宗 000-0000 宮城県 ○○市・・・ 00006 浅井長政 000-0000 滋賀県 ○○市・・・ 00007 前田利家 000-0000 福井県 ○○市・・・ 00008 毛利元就 000-0000 岡山県 ○○市・・・ 00009 斉藤道三 000-0000 岐阜県 ○○市・・・ 00010 島津義光 000-0000 福岡県 ○○市・・・ --------------------------------------------------- (1)このシートを「県」でフィルターをかけて、  ユーザーフォームに結果を表示したい。  (表示行数は不定となります。) (2)結果表示行のそれぞれにチェックボックスを設け、  一斉印刷と選択印刷の両方を選べるようにしたい。 と言うのが目的なのですが、 このような処理はユーザーフォームで可能なのでしょうか? よろしくお願いします。

  • 文字列データからある部分のみデータ取得(その2)

    すみません、↓の質問者です。 質問の内容が似てしまい申し訳ありません。 下記のようなデータの場合なんですが。。 1. <caption class="cap1">FA 説明会</caption> から "FA 説明会"だけを取得する。 2. <div class=\"p2\">〒400-0031 山梨県甲府市丸の内1-17-10&nbsp;&nbsp;(甲府市役所隣・東武穴水ビル4F)</div> から "〒400-0031 山梨県甲府市丸の内1-17-10;(甲府市役所隣・東武穴水ビル4F)" のみ取得する。(途中の&nbsp;&nbsp;は省きたい) で、1の場合と2の場合とどちらでも対応できる データの取得のやり方があれば押していただきたいです。 。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Excel2003での行重複削除

     Excel2003で、列のセル内容が同一の場合を削除・抽出することは可能でしょうか。例えば、次のようなイメージです。 行番号 A列 B列 行1 A1県 B1市 行2 A1県 B2市 行3 A1県 B3市 行4 A1県 B4市 行5 A2県 B5市 行6 A2県 B6市  ここから、A列が同一の行の重複を削除したいのです。上記では、行1から行4までは「A1県」で同一なので、1つの行だけ残し後の行は削除したい。B列の内容は重複削除で一部消えますが構いません。上記の場合、抽出結果は次のようになります(先頭行だけ残した場合ですが)。 行番号 A列 B列 行1 A1県 B1市 行5 A2県 B5市  データベースが大きいため、手作業で削除して行くのは大変です。適当な方法がありましたら、是非、ご教示ください。  どうぞ宜しくお願いします。  

  • アクセス2010 他テーブルにないデータを削除

    都道府県TB 県ID 地域名 県名 参加県TB 県ID 参加県TBに県IDが無い分を都道府県TBから削除したい。ただし、都道府県TBの地域名="東北"という条件で DELETE FROM 都道府県TB WHERE 都道府県TB.地域名='東北' ~~~ WHERE 参加県TB.県ID Is Null どんな記述になるのでしょうか?(質問の意図を汲みとって頂ければ幸ですが。)

  • MySQL Date型にNULLが設定できない。

    csvファイルからMySQLにデータを取り込む際に、Date型やint型にNULLを設定するにはどうしたらよいでしょうか。 以下のようなテーブルに | tTest | CREATE TABLE `ttest` ( `ID` bigint(20) NOT NULL, `title` text NOT NULL, `naiyou` varchar(100) DEFAULT NULL, `kaishi` date DEFAULT NULL, `owari` date DEFAULT NULL, `peirod` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=sjis | 以下のようなcsvファイルを読み込んだとき(*)、 10,テスト,2008-04-05,2009-04-23,43 11,テスト,2008-04-05,NULL,43 12,テスト,2008-04-05,2009-04-23,NULL 2行目のNULLで ERROR 1292 (22007): Incorrect date value: 'NULL' for column .... とエラーが発生します。 3行目のNULLでもint型ですが同様にエラーとなります。 一方、insertで行の追加以下のようにした場合は成功します。 insert into tTest values (12,テスト,'2008-04-05',NULL,NULL) 外部ファイルから読み込んだ場合にNULL値を設定するにはどのようにしたらよいのでしょうか。 (*)以下のコマンド LOAD DATA INFILE "E:\\work\\MySQL\\sample.csv" INTO TABLE tTest FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n";

    • ベストアンサー
    • MySQL
  • 重複データのチェック方法がわかりません。

    はじめまして。エクセル・アクセス関係を最近さわりはじめました。 下記について重複しているデータをチェックしたいのですが、いろんなサイトをみても「これ!」というのが見当たらず困っています。どのような式を作成すればよいのか、ご教授ください。 ちなみに今はMATCH関数を使いながら、データを並び替え・・とすごく面倒なことをしています。 顧客ID     請求番号       登録日 1111       0001         2010/01/01   1112       0001         2011/11/11   1113        0002         2010/02/01   1113       0003     2011/01/01   1114       0004     2011/01/01   1114       0005     null         上記の顧客データあるとします。 顧客IDや請求IDが重複しているものがあるため、これらを最終的には下記(<最終形態>)のようにしたいのですが、その前に横の列にチェック(<チェック>)をいれたいです。 <最終形態> 顧客ID     請求番号       登録日 チェック 1112       0001         2011/11/11    残し 1113      0003     2011/01/01       残し 1114      0004     2011/01/01       確認 1114      0005     null            確認 <チェック> 顧客ID     請求番号       登録日       チェック 1111       0001         2010/01/01     削除   1112       0001         2011/11/11     残し 1113       0002         2010/02/01     削除 1113      0003     2011/01/01        残し 1114      0004     2011/01/01        確認 1114      0005      null              確認 (1)請求番号が同じで顧客IDが異なり、登録日も違う場合は、登録日が新しいほうに「残し」、古いほうに「削除」を入れる (2)顧客IDが同じで請求番号が異なり、登録日も違う場合は、登録日が新しいほうに「残し」、古いほうに「削除」を入れる (3)顧客IDが同じで請求番号が異なる、あるいは請求番号が同じで顧客IDが異なり、登録日がnull(どちらか一方でも)の場合は、「確認」を入れる→登録日がともに同じ日付でも「確認」を入れる ※ちなみに、実際の重複するデータは上記のように連続して入っていません。 順序はばらばらです※ エクセルでもアクセスでもかまいませんが、やりやすいほうでご教授いただけると幸いです。 よろしくお願いします。 SQLはよくわかっていません。。 最初から教えていただけると幸いです。

  • ACCESSの同一テーブル内の重複データ行の削除

    ACCESS2007で、同一テーブル内の重複データ行を、削除or除外抽出して、重複のないデータを残したいと考えています。(EXCEL2007の重複削除のイメージ) ●データサンプル <会社名><〒><住所><電話番号><FAX><業種><@@@@@> 山田商事|100-123|東京都千代田区@@@|03-2456-1111|…………………… 河野商会|200-123|大阪府枚方市@@@|072-556-1111|…………………… 佐野商店|500-123|愛知県名古屋市@@@|052-456-1111|…………………… 山田商事|100-123|東京都千代田区@@@|03-2456-1111|++++++++++++++++ 佐野商店|500-123|愛知県名古屋市@@@|052-456-1111|================= 大戸屋|800-123|福岡県福岡市@@@|03-2456-1111|……………………    ↓ ↓ ↓ ↓  ↓  ↓  ↓  ↓  ↓ 山田商事|100-123|東京都千代田区@@@|03-2456-1111|…………………… 河野商会|200-123|大阪府枚方市@@@|072-556-1111|…………………… 佐野商店|500-123|愛知県名古屋市@@@|052-456-1111|…………………… 大戸屋|800-123|福岡県福岡市@@@|03-2456-1111|…………………… ●今回、重複判定に使う列は、<電話番号>で、上の方に存在するデータが行が優先して残るようなイメージです。 クエリを使用するのか、SQL文を書かなきゃいけないのか、その辺りの判断もつかない初心者ですが、よろしくお願い致します。

  • 住所情報がない場合であっても、NULLで抽出してきてほしい。

    住所情報がない場合であっても、NULLで抽出してきてほしい。 以前、ここで質問していただき、解決したのですが、 新たな問題が発生したので、改めて質問させてください。 他にも色々なテーブルと連携してSQLで情報を抽出しているのですが、 住所情報の入っているテーブルに住所情報がない人が居ます。 ただし、その人の住所以外の個人情報もピックアップして出力したいので、 住所情報が無い人は、住所の列はNULLで出力したいです。 下記に以前質問した時の情報も載せます。 ・下記テーブルの他にもいろいろなテーブルと結合させています。 ・各テーブルとの結合は個人IDで行っています。 方法はどんな形でも構いません。 もっと細かい情報が欲しい場合は、適宜補足します。 本当は今日中ですが、今週中には仕上げないといけないので、 分かる方がおりましたら、ご回答よろしくお願いします。 ―――以下、前回質問した情報――――――――――――――― 同じ行に、二つの住所を出したい。 下記のような場合、どのようなSQLを組めばよろしいでしょうか。 ★FROM表 個人ID 識別番号 住所 A 1 東京都品川区~ A 2 北海道札幌市~ A 3 青森県弘前市~ B 1 埼玉県川口市~ B 2 福岡県福岡市~ B 3 宮崎県宮崎市~ ・   ・    ・ ・   ・    ・ ・   ・    ・ ★出力結果 A   東京都品川区~ 青森県弘前市~ B   埼玉県川口市~ 宮崎県宮崎市~ ↑    ↑        ↑ 個人ID 識別1の住所   識別3の住所 イメージとしては以下のような感じです。 識別1:現住所、識別2:保証人住所、識別3:本籍住所 上表を例にすると、 Aさんの現住所は東京都、本籍地は青森県 Bさんの現住所は埼玉県、本籍地は宮崎県 といったかんじです。 ただWHERE ANDでは、どちらかしか引っ張って来れないので、 なにか他の方法がありましたら、教えてください。 よろしくおねがいします。