データの追加方法と問題解決 | REPLACEコマンドの挙動と対策

このQ&Aのポイント
  • データの追加方法について解説します。主キーが既に存在している場合には指定したカラム以外の情報がNULLになってしまう問題がありますが、対策方法もご紹介します。
  • データの追加方法としてREPLACEコマンドを使用することができます。しかし、指定したカラム以外の内容がNULLに変更されてしまう問題があります。この問題を解決する方法をご紹介します。
  • データの追加方法について解説します。主キーが既に存在している場合には指定したカラム以外の情報が変更されてしまう問題があります。この問題を解決するための対策方法をご紹介します。
回答を見る
  • ベストアンサー

データの追加の仕方

特定のカラムへ、レコードの追加を行いたいと思っています。その際に、 主キーが既に存在していれば、該当するカラムのデータのみを追加し、 主キーが存在しなければ、新たに主キーを追加して、レコードを登録を行いたいと思います。 REPLACEコマンドでこの操作を実行できると思ったのですが、主キーが既に存在する場合に、指定したカラム以外の内容が、NULLに変更されてしまうので困っています。指定したカラム以外は、そのままの情報を保持して欲しいのですが、どのようにすれば良いのでしょうか? 行いたい操作の具体例を以下に挙げます。 現在のテーブル +---+--------+--------+ |ID| Colum1 | Colum2 | +----+--------+--------+ |15| aaaa | NULL | |23| NULL | bbbb | +----+--------+--------+ 上のようなテーブルに、ID=1,Colum2='cccc'というデータを追加したい。但し、 もしID=1が存在しなければ、新しく(ID=1,Colum1=NULL,Colum2='cccc')というデータを追加したい。 もしID=1が存在する場合には、Colum1の内容は変更せずにColum2だけ変更したい。

  • MySQL
  • 回答数2
  • ありがとう数1

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

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

データのサンプルを掲載するなら、文章と合わせてくれないと、逆に分かりにくくなります。 inner join(両方にある)とleft join、right joinの結果をunionでつなげればいいだけでは? 違う意味なら、元の表、得たい結果をしっかり対応付けて補足説明してください。 ※unionでall指定しなければ、重複排除される。 select t1.id,c1,c2,c3 from t1 inner join t2 on t1.id=t2.id union select t1.id,c1,c2,c3 from t1 left join t2 on t1.id=t2.id union select t2.id,c1,c2,c3 from t1 right join t2 on t1.id=t2.id order by 1 ;

rafysta
質問者

お礼

質問が悪かったみたいで申し訳ありません。 おかげさまで、希望の結果を得ることができました。 ありがとうございます。

その他の回答 (1)

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

Colum1のデフォ値はなんでしょうか? NULLならColum1の値を指定せずに強制UPDATEで 問題ないと思いますが。 なおMySQLのバージョンを書いたほうがよりよい 回答が期待できます。

rafysta
質問者

補足

回答ありがとうございます。 MySQLのバージョンは、5.0.17です。 Column1は、NULLの場合もあるし、データが存在することもあります。 行いたい操作をもう少し具体的に説明します。 今、手元に下のようなテーブルがあったとします。 +----+------+ | ID | Colum3 | +----+------+ | 15 | dddd | | 57 | edfd | | 75 | d3es | | 82 | vdsd | | 21 | 4gsc | | 90 | bssd | | 11 | dddd | +----+------+ このテーブルのデータを質問文に書いたようなテーブルに結合させたいと思っています。ただ、right joinやleft join、inner joinを普通に使うと、どちらかのテーブルのIDのみにデータが限定されてしますよね?そうではなくて、Colum1,Colum2,Colum3のどれかにデータが存在するものすべてを結合したテーブルを作成したいのです。 結合では、うまくできなかったので、一つずつレコードを追加していけば良いと考えたのですが、うまくできずに、今回の質問内容となりました。

関連するQ&A

  • テストデータを作成したい

    Oracle9iです。テストデータを作成したいです。 カラムが200くらいあるテーブルに対して、既に登録済みの1レコードの主キーだけ変更したものを10万件登録したいのですが、何かいい方法はないでしょうか?

  • 異常?なカラムのデータについて教えて下さい。

    異常?なカラムのデータについて教えて下さい。 あるテーブルを全件出してみたところ、あぁNULLデータが入っているレコードがあるなーと気づきました。 抽出データには不要だったので“カラム IS NOT NULL”をしてみたのですがNULLデータを持ったレコードが排除できません。 別の方法で “カラム = ''” とか “カラム like '%%'” なんてやってみたのですがデータがNULLになっているものが排除できません。 これは不具合なのでしょうか?

  • sqliteへのデータ追加

    sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>

  • 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
  • 一対一の追加が出来ません。

    今回つまづいたのは、一対一のリレーションのテーブルの中で新規にレコードが追加できないことです。 テーブルをA,B,Cとします。メインとなるのがAです。B,Cは機密上テーブルを分けてあります。 新しくAのレコードを追加してそのレコードのBもしくはCにレコードを追加しようとすると下記のようにエラーになります。 「テーブル '<テーブル名>' にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことはできません。」 リレーションシップが問題のようなので全てのリレーションを一旦切断して(各クエリの接合も)、A,B,Cをつなげるクエリのみで行ってもこのようなエラーになります。 また、もともとあったAのレコードに対してのB,Cの入力はエラーが出ません。新しく作ったAレコードに対してエラーが出ます。 試験的にレコードを減らしており、Aには100件、B,Cには何も入れておりません。 クエリのリレーションは外部接合で行っています。 フィールドは以下のようになっています。 A:注文ID(主)、受付日、名前、金額 B:注文ID(主)、送付日、・・・ C:注文ID(主)、・・・ 助言宜しくお願いします

  • 1万件のレコードの追加方法、主キーは億単位で不規則

    テスト用のテーブルを作りたいと思っています。しかし、主キーの部分が実際とはかけ離れた状態になってしまいます。 フィールド数が複数あり、同じ値でも構わないので1万件分のレコードを追加したいです。 やり方としては、 <1>主キーのフィールド以外の全部のフィールドを作ってデータを入れます。 <2>そしてから、INSERT INTO `aaa` SELECT * FROM `aaa`を1万件超えるまで繰り返し実行。 <3>主キーのフィールドをauto_increment指定して追加します。 <4>1万を超えるフィールドを削除するためにDELETE FROM `aaa` WHERE id>10000を実行 ※実際には主キーにauto_incrementを入れません。 ※実際には主キーのデータは数千万~億単位(89234521や000455839)の数字(型はBIGINT)で、増加の仕方はまちまちです。 auto_incrementを使わず、数千万単位の数字で、増加の仕方もまちまちな主キーのデータを追加する方法はないでしょうか。

    • ベストアンサー
    • MySQL
  • ACCESS 重複データ削除の順番について

    追加クエリを使って重複データを削除する時に、削除されるデータについて質問です。 重複レコードを含むテーブルの構造のコピーを作成し、重複レコードを含むすべてのフィールドの主キーを作成して、元のテーブルから新しいテーブルへの追加クエリを実行して、重複レコードを一括削除をしています。 [操作についての参考URL] http://support.microsoft.com/kb/879852/ja =========================================== (テーブル) [ID]  [クラス]  [名前]   [時間]     1     A     ああ   11:00 ←重複 2     B     鈴木   12:00    3     C     アア   13:00     ←重複  4     A     ああ   14:00 ←重複 5     B     森    15:00   6     C     アア   16:00     ←重複  7     B     青山   17:00   8     C     アア   18:00     ←重複     9     A     ああ   19:00 ←重複 =========================================== 上記のようなテーブルで「クラス」と「名前」の2つのフィールドを主キーにした場合、 「A」の「ああ」さんと、「C」の「アア」さんが各3件ずつ重複しています。 しかし、「ID」と「時間」はそれぞれ違っています。 このような場合に、削除されないデータと削除されるデータの違いは何なのでしょうか? ACCESSの仕様でとか、レコードの若い番号順で削除されるとか、明確なルールが あれば教えていただけると幸いでございます。 御手数お掛け致しますが、何卒よろしくお願いいたします。

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • MySQLで同じデータにフラグ付け出来ますか?

    データベースの初心者です。MySQLを使用してSQL文を試しましたが、うまくいきません。 わかりやすく教えていただけますか? 下のような2つのテーブルで、テーブル2の項目カラムに存在するデータが、 テーブル1の区分にあれば、一致する行(NOカラムの5~7)だけに、 フラグ”1”を付けたいのです。(区分カラムに、"*"で始まるデータは除きます) 区分に、データが全て埋まっていれば簡単に出来るのですが、 先頭行のみデータがあって、次の区分まで、Nullが入っています。 テーブル1 NO 区分 フラグ 1  aaaaa   null 2  null     null 3  null     null 4  null     null 5  bbbbb   null 6  null     null 7  *nozoku  null 8  ccccc null 9  null null テーブル2 NO 項目 1  bbbbb 2  eeeee よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MDB内既存テーブルに主キーのフィールド追加は可能か?

    DAOでMDBにアクセスするシステムなのですが、 テーブル仕様変更に伴い、既存のテーブルに新規に主キーとなるフィールドを追加します。 当テーブルはすでに主キーは複数存在しています。 現在は CreateIndex("PrimaryKey")を行ったのですが、 「既に主キーは既に存在しています」と表示されてしまい、異常終了をしてしまいます。 単にフィールド追加することは容易なのですが、主キーとなると、だめみたいです。 この場合は、どのようにすれば良いのでしょうか? 大変申し訳ございません。 ご教授よろしくお願い致します。