• 締切済み

updateができない。

mysql-4.1.11を使っています。 ひとつのDBの中にtableがふたつあります。仮にtable1,table2とします。 このふたつのテーブルについて select * from table1,table2 where table1_col1=table2_col1; というふうにすると、table1_col1とtable2_col1の値が等しいものだけ抽出してくれます。table1_co1,table2_col2というのはそれぞれのテーブルのカラムのひとつです。 しかし、同じ条件で update table1,table2 set table1_col2="A" where table1_col1=table2_col1; という命令を実行しても 「Query OK, 0 rows affected (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 0」 というメッセージが出るだけでtable1_col2の値が変わりません。本当なら3つのデータが変わるはずです。 命令の仕方がおかしいのでしょうか? ほかにおかしなところがあるのでしょうか? よろしくおねがいします。

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

みんなの回答

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.1

table1_col1=table2_col1に該当するデータがないのでは? 命令がおかしいならば他のメッセージが出るはずですので、 値をよく確認してください。

ma-chan45
質問者

お礼

ありがとうございます。 でもtable1_col1=table2_col1に該当するデータは間違いなくあります。 とりあえずサブクエリで回避することができました。↓です。 update table1 set table1_col2="A" where table1_col1 in (select table2_col1 from table2); これでできたので、これを使おうと思います。 でも、テーブルを代えると update table1,table2 set table1_col2="A" where table1_col1=table2_col1; でうまくいく場合もあるのです・・・・・。なぜなのでしょう?

関連するQ&A

  • MySQLのUPDATE実行結果を受け取る関数

    ↓コマンドライン上でのMySQLのUPDATE実行結果 Rows matched: 1 Changed: 0 Warnings: 0 Changed値は、mysql_affected_rows()で受け取れるのですが、 matched値を、受け取る関数はあるのでしょうか? ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • update実行時の、追加情報の取得について

    こんばんは。 業務で、以下の情報を知りたいと思います。 5000件のupdate文をマルチクエリ実行した際に、 1.すべての条件が合致して、更新された(成功) 2.PKは合致するが、他の条件は合致しなかった(エラーとしてエラーコードとリクエスト情報を返します) 3.PKが合致するデータ自体が存在しなかった(対象のリクエストデータのみ、インサートの処理が実行されます) 以上を実現するために、以下のようなSQL文を作成して実行しようとしています update tableA set column1=('aaa','bbb',column1) where pk='xx'; 1.pk='xx'かつcolumn1='aaa'が満たされた場合、affected_rowsは1になります。 3.データ自体が存在しないので、affected_rowsは0です 2.については、matchedは1だが、changedは0という結果から判別したいのですが、関数としては、mysqli_infoを使用するしかないでしょうか。文字列が返却されてくるので、必要な情報(matchedとchangedのカウント)のみを取得できる方法を探しています 環境は、以下です PHP5 MySQL(MySQLi接続) FreeBSD 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 複数テーブルからデータを取り、updateする

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1211685 にも同じような質問があったのですが、同様の処理でうまくupdateされません。分かる方がいらっしゃいましたら教えてください。 今、テーブルが2つ(table1、table2)があり、それぞれ2つのカラム(column1、column2)を持っています。ここで、それぞれのカラム2が等しく、カラム1が指定した値のレコードのみ値をupdateしたいです。 update table1 set column1 = 'AAA' from table1,table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' としたところ、「from table1,table2 where 」の辺りに間違いがあると表示されます。 上の例とどう違うのか分かりません。 よろしくお願いします。m(__)m

  • MAX_ROWSが反映されていない?

    Mysql5.0.22-standardで65535行では足りないため増やそうとしています。 一応 truncate table test5; とした後に ALTER TABLE test5 MAX_ROWS=1000000000 AVG_ROW_LENGTH=10000;で Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 と出るのですが、 PHPで検査のためにデータを登録させていくと65535行でエラーが出て、 SELECT COUNT(*) FROM test5; +----------+ | COUNT(*) | +----------+ | 65535 | +----------+ 1 row in set (0.00 sec) の状態です。 反映するために何かコマンド必要なのでしょうか?

  • Query OK, 0 rows affected

    Query OK, 0 rows affected (0.00 sec) が、MySQLに与える影響について、教えてください。 この場合、「0 rows affected」て書いてあるので、 MySQLに与える影響はない、と考えてよいのでしょうか? それとも、何らかの場合(例えばrows以外)では、 コマンドによっては、 この表示が出ても、 MySQLの設定とかが変更されることはあるのでしょうか? 知りたいのは、 この表示が出てきたとき、 打ったコマンドが 「100%失敗だった」か、あるいは、「必ずしもそうとは限らない」、かについてです。

    • ベストアンサー
    • MySQL
  • SQLServer T-SQL テーブルのJOIN

    こんにちは。 テーブル"TABLE_A"、"TABLE_B"があり、 各々のテーブルにカラム"COL"があります。 カラム"COL"にインデックスを作成しています。 テーブル"TABLE_A"、"TABLE_B"をカラム"COL"で結合 する際の演算子にLIKE文を用いています。"TABLE_B"の カラム"COL"に"%"を付加していますが、これが原因で "COL"のインデックスが効きません。どのようにすれば LIKE検索でインデックスを有効にすることができるの でしょうか? SELECT * FROM TABLE_A INNER JOIN TABLE_B ON TABLE_A.COL LIKE TABLE_B.COL+'%'

  • Oracleのupdate文について

    OracleでテーブルB、Cを結合し取得できた項目で、テーブルAを更新したいのですがSQLがわかりません。結合結果とテーブルAは1:1にはなりません。 件数が結合結果>テーブルAの時もあれば、その逆の場合もあります。また、複数項目を更新したいです。実行して考えてみたいのですが、明朝客先ですぐに実行しなければならず(テスト環境はあるので明日そこで一旦確認後、すぐに本番環境で実行)、現在移動中→ホテル泊のため余裕がありません。 ネットで下記を見つけたのですが、更新する項目に更新日時を追加したいのと、テーブルAとの紐付けやEXISTSのWHEREはテーブルBとC両方の項目に紐づけたいです。 また、テーブルAの更新条件に、テーブルB、Cにはないcolumn③に対する条件も追加したいです。 UPDATE [TABLE①] A SET (COLUMN①, COLUMN②) = ( SELECT B.COLUMN, C.COLUMN FROM [TABLE②] B, [TABLE③] C WHERE B.COLUMN = C.COLUMN AND B.COLUMN = A.COLUMN ) WHERE EXISTS ( SELECT 1 FROM [TABLE②] B2 WHERE B2.COLUMN = A.COLUMN) もろもろとわかりづらい説明&他力本願で心苦しいのですが、どなたか教えていただけないでしょうか?

  • 助けてください。Xampp MySQLへログインできなくなってしまいました。

    お世話になります。 XampでMySQLを扱おうと悪戦苦闘中です。 サイト http://homepage1.nifty.com/gak/webdb/mysql.html と、 書籍 PHPによるWebアプリケーションスーパーサンプル第2版 p.740 を参考にしながら行いました。 最初 c:\zampp\mysql\bin>mysql -u root で、mysqlへ入れました。 そして、パスワードを設定しました。 mysql> use mysql Database changed 次にrootユーザーパスワードの設定をしました。 mysql> update mysql.user set password='****' where user='root'; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> 次に、mysqladminでもパスワードの設定ができるということが記載されていたので、一端MySQLをExitして、試してみました。 C:\xampp\mysql\bin>mysqladmin -u root password '**' mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' と、いう結果でした。 どうも受け付けられなかったようです。 そして、再度MySQLへ入ろうと C:\xampp\mysql\bin>mysql -u root -p Enter password:****** ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwordO) となってログインできなくなってしまいました。 Enter password: で、先ほど設定したパスワードを入力しています。 MySQLのパスワードを忘れた場合は、という記載もありまして、 「--skip-grant-tables オプションを指定してmysqldを起動」 と、いうことでしたので以下のように実行してみましたが、やはりダメでした。 C:\xampp\mysql\bin>mysqld --skip-grant-tables C:\xampp\mysql\bin>mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password O) もう、お手上げです。 おわかりになる方見えましたら、なにとぞよろしくお願いします。 コマンド出力は記録をとりながら行っていたので、こうして記載もできました。

    • ベストアンサー
    • MySQL
  • 単一行副問合せにより2つ以上の行が返されます。エラーになります。

    単一行副問合せにより2つ以上の行が返されます。エラーになります。 お世話になります。 下記SQLを実行するとエラー”単一行副問合せにより2つ以上の行が返されます。” になってしまいます。 ご教授お願いします。 table1のcol01にtable2のcol01を table1のcol02にtable2のcol02を table2のcol03が3、table2のcol05が5で且つ table1のcol06とtable2のcol06が一致する場合に 変更したく下記SQLを作成しました。 update table1 set (col01,col02) = (select col01,col02 from table2 t2,table1 t1 where t2.col03 = 3 and t2.col05 = 5 and t2.col06 = t1.col06) where t1.col06 in (select col06 from table2); 以上 よろしくお願いします。

  • カラム情報(主キー、データ型、桁数等)を取得するには

    テーブルに格納されているカラム情報(カラム名、主キー、データ型、データの桁数)を取得したいと考えています。 主キー情報とそれに付随するカラム情報は現在下記のSQL文で取得しています。 SELECT C.TABLE_NAME , COL.COLUMN_NAME, C.CONSTRAINT_TYPE, COL2.DATA_TYPE, COL2.DATA_LENGTH FROM USER_CONSTRAINTS C, USER_CONS_COLUMNS COL, USER_TAB_COLUMNS COL2 WHERE C.TABLE_NAME = COL.TABLE_NAME AND C.CONSTRAINT_NAME = COL.CONSTRAINT_NAME AND C.TABLE_NAME = COL2.TABLE_NAME AND COL.COLUMN_NAME = COL2.COLUMN_NAME AND C.CONSTRAINT_TYPE = 'P' AND UPPER(C.TABLE_NAME) = UPPER('テーブル名') ORDER BY C.TABLE_NAME, COL.POSITION ここで、主キー以外のカラムに対しても同様にカラム情報を取得したいのですが、どのように取得すればよろしいでしょうか? ※カラム名、主キー有無、データ型、桁数 でカラム情報を取得できれば最も良いのですが、 主キー情報を除いた全体のカラム情報を取得する事ができれば、こちらの情報でも助かります 宜しくお願い致します。