質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

7回答

2318閲覧

データベースをコピーしてもsql文が正常動作しない

moitaro

総合スコア443

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/01/26 10:51

編集2016/01/27 06:09

お世話になっております。

あるシステムを移植しようとしております。

元のテーブルtableはphpmyadminからsql文を

sql

1select o.orders_id as 伝票番号, o.customers_id as 顧客コード, o.date_purchased as 受注日, o.ec_shukkabi as 出荷日, o.customers_public_id as 顧客分類, o.customers_company as 顧客会社名, o.customers_company_post as 顧客部署名, o.customers_name as 顧客名, o.payment_method as 支払方法名, o.ec_nyukimbi as 入金日, o.ec_noshigami as のしがみ有無, o.ec_noshigamina as のしがみ名, o.ec_noshigamiatena as のしがみ宛名, op.ec_seq as SEQ_NO, op.ec_dempyougyouban as 伝票行番, case WHEN ps.child_products_id > 0 THEN ps.child_products_id ELSE op.products_id END AS 製品id, (select products_model from products where products_id = 製品id) AS 商品コード, (select products_name from products_description where products_id = 製品id and language_id = '2') AS 商品名, o.delivery_public_id as 出荷先分類, o.delivery_company as 出荷先会社名, o.delivery_company_post as 出荷先部署名, o.delivery_name as 出荷先名, o.delivery_postcode as 出荷先郵便番号, o.delivery_state as 出荷先都道府県, o.delivery_city as 出荷先市町村, o.delivery_street_address as 出荷先住所, o.delivery_suburb as 出荷先住所2, o.delivery_telephone as 出荷先電話番号, o.delivery_fax as 出荷先FAX番号, op.ec_nouhinyoteibi as 納品予定日, op.ec_nouhinyoteijikan as 納品予定時間時頃, op.ec_takkyuubintoiawasebangou as 宅急便問合せ番号, case WHEN ps.child_products_id > 0 THEN ps.child_products_quantity * op.products_quantity ELSE op.products_quantity END as 数量, case WHEN ps.child_products_id > 0 THEN '' ELSE op.products_price END as 販売単価, case WHEN ps.child_products_id > 0 THEN '' ELSE op.ec_kingaku END as 金額, op.orders_products_id as 製品別伝票番号, o.ec_unsougyousha as 運送業者, case WHEN ps.child_products_id > 0 THEN '' ELSE o.order_total END as 合計金額 from orders o left join orders_products op on o.orders_id= op.orders_id left join products_set ps on ps.parent_products_id = op.products_id where ec_shukkabi = date('0000-00-00') and ec_kyanserufuragu = 0 ORDER BY o.orders_id , op.orders_products_id , ps.products_sort_order

と実行すると

This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
-------- とでますが思った通りの値が返ってきます。

ですがそのデータベースを同じmysqlのtest_tabeltableをコピーして
同様のsql文を発行すると

#1054 - Unknown column 'o.ec_shukkabi' in 'field list'

とのエラーが出てしまいます。

データベースのコピーしただけなのですが
どうして移植したtest_tabelの方はエラーなのでしょうか?

コピー方法はsshで接続したのち
mysql -u ユーザー -pパスワード -h localhost < mototable.sql
とのようにやっております。

o.などどこかで宣言されていてそれがメモリ上に残っているのでしょうか?

何か情報をお持ちな方はお力添えいただきますようよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ao_love

2016/01/26 10:58

出来ればSQL全文をコード記法にのっとって提示してください。
guest

回答7

0

MySqlAdminを使ったことがないので断言できませんが、
0. MySQLAdminがMySQLの仕様に追いついていない
0. 番号リスト"mysql -u ユーザー -pパスワード -h localhost < mototable.sql"で流し込んだSQLに文法ミスがあった

の二択かなという感じです。個人的には後者の「mototable.sql」が、mysqldumpとかで作ってて、そこにmysqlさんの残念な誤訳があったのかなぁと推測してます。
~~~~~
ここから脱線
~~~~~
MySQLさんは、やたらと「逆引用符(日本語キーボードだと"Shift + @"で出ます)を、引用符や二重引用符の代わりに使うのですが、これが*nix系OSとの相性があまり良いとは言えない記号なので、ここが悪さをしてるのではと直感しました。KKD(感、経験、度胸)だけでものをいうのはアレなんですけどね。
~~~~~
ここまで脱線
~~~~~
↑というのが、「sql文を流すだけではコピー出来ないのでしょうか?」に対する僕なりの答です。要は「MySQLさんが出してくれたSQLが正しいとは限らない」というトホホな話です。

static小父さんになりかけてるおっさんからのコメントとしては、mysqldumpで作ったSQLを流しこむ際に、"mysql -u ユーザー -pパスワード -h localhost < mototable.sql"を実行する際に、"-v"だったか"-vv"オプションをついでにつけて、SQL実行結果を標準出力に出させ、その結果を泥臭く確認して、エラーやウォーニングが出ていないかを確認するしかないと思います。

特に、mysqldumpを使用しても、一部DDLのオプションは生成されないこともあるので……。理想は、MySQL止めて、データおよび設定ファイルまるごとコピーして、「移行完了!」ってするのがいいかなぁと思います。
仕様書関連が闇の中から闇の中に移されてしまうので、これはこれで悪手なんですけどね……。

投稿2016/01/27 02:55

kwy8791

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2016/01/27 04:47

コメントありがとうございます。 sql文のコピーでちゃんとテーブルに入っていないものがあるので その可能性が高いと思ってしまいました……  とりあえず ↓のToniVaquerさんの仰るようにコピーして試してみます……  sql文でコピー出来ないとは予想しておりませんでした……
guest

0

単純にテーブルをコピーしたいならphpMyAdminにやらせて

phpMyAdminからテーブルにクリックし
TOPメニュー > 操作 > テーブルを (データベース).(テーブル) へ移動する: > (新しい名前をつけって) > 「実行」

投稿2016/01/27 02:28

ToniVaquer

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2016/01/27 03:13

コメントありがとうございます。 テーブル数が膨大なので一つ一つコピーするとヒューマンエラーを引き起こす可能性があったためsqlでエクスポートしてやっていましたが 数が少ないならばその方法もありますね。 コメントありがとうございました。
guest

0

Unknown column 'o.ec_shukkabi' in 'field list'

「フィールドo.ec_shukkabi の列なんて知らない」 と出てるので、カラムが無いのです。

また、「データベースをコピー」しているわけではなく、

mysql -u ユーザー -pパスワード -h localhost < mototable.sql

を見るに、DDLを流し込んでいるだけですね・・・。

ここまでで考えられるのは・・・mototable.sqlが最新のものと異なる可能性が高いです。
あとは、参照するテーブルを間違っている可能性も考えられます。

元データベースで以下のSQLで、カラムを調査します。
(「テーブル名」には、該当のテーブル名をいれてください。お問い合わせのSQLのFROM句の後です)

show columns from 「テーブル名」

新しいほうのデータベースでも同様にしてカラム名を調査して、元のものと食い違いが無いか
調べて見てください。

投稿2016/01/26 14:11

Toyoshima

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2016/01/27 01:47

コメントありがとうございます。 ```lang-sql show columns from products_set ``` parent_products_id int(11) NO PRI NULL child_products_id int(11) NO PRI 0 child_products_quantity int(11) NO 0 products_set_date_added datetime NO 0001-01-01 00:00:00 products_set_last_modified datetime YES NULL products_set_status tinyint(1) NO 0 products_sort_order int(11) NO 0 両方とも上記でしたが 違うテーブルではテーブルが違っていた気がしました…… sql文を流すだけではコピー出来ないのでしょうか?
moitaro

2016/01/27 04:34

↓の↓で返答した際に気が付いたのですが -------- コピー先 -------- Field orders_id customers_id customers_name customers_company customers_street_address customers_suburb customers_city customers_postcode customers_state customers_country customers_telephone customers_email_address customers_address_format_id delivery_name delivery_company delivery_street_address delivery_suburb delivery_city delivery_postcode delivery_state delivery_country delivery_address_format_id billing_name billing_company billing_street_address billing_suburb billing_city billing_postcode billing_state billing_country billing_address_format_id payment_method payment_module_code shipping_method shipping_module_code coupon_code cc_type cc_owner cc_number cc_expires cc_cvv last_modified date_purchased orders_status orders_date_finished currency currency_value order_total order_tax paypal_ipn_id ip_address delivery_telephone delivery_fax billing_telephone billing_fax customers_fax customers_name_kana delivery_name_kana billing_name_kana -------- コピー元 -------- Field orders_id customers_id customers_public_id customers_name customers_company customers_company_post customers_street_address customers_suburb customers_city customers_postcode customers_state customers_country customers_telephone customers_email_address customers_address_format_id delivery_public_id delivery_name delivery_company delivery_company_post delivery_street_address delivery_suburb delivery_city delivery_postcode delivery_state delivery_country delivery_address_format_id billing_public_id billing_name billing_company billing_company_post billing_street_address billing_suburb billing_city billing_postcode billing_state billing_country billing_address_format_id payment_method payment_module_code shipping_method shipping_module_code coupon_code cc_type cc_owner cc_number cc_expires cc_cvv last_modified date_purchased orders_status orders_date_finished currency currency_value order_total order_tax paypal_ipn_id ip_address delivery_telephone delivery_fax billing_telephone billing_fax customers_fax customers_name_kana delivery_name_kana billing_name_kana ec_dempyoukubun ec_kingaku ec_nouhinyoteibi ec_nouhinyoteijikan ec_takkyuubintoiawasebangou ec_butsuryuuiraibangou ec_kuchikazu ec_butsuryuusoushinnichiji ec_sakujokubun ec_shoppukodo ec_kadokodo ec_shukkasakikubun ec_fukusuushukkasaki ec_komento ec_juchuuzanfuragu ec_shukkabi ec_nyukinyoteibi ec_nyukinfuragu ec_nyukimbi ec_kyanserufuragu ec_kyanserubi ec_kyanserumerufuragu ec_nyukinkingaku ec_hempinkingaku ec_osorifuragu ec_kakutokupointosuu ec_bonasupointosuu ec_shiyoupointosuu ec_pointofuragu ec_noshigami ec_noshigamina ec_noshigamiatena ec_tsuushinran ec_unsougyousha ec_memo ec_hosttorikomi ec_kompeifuragu ec_merusoushinfuragu ec_tokusokufuragu ec_shukkamerufuragu ec_nyukimmerufuragu ec_seikyuushohakkoubi ec_shukkakubun ec_butsuryuusoushinkubun ec_yobi1 ec_yobi2 ec_yobi3 ec_yobi4 ec_yobi5 ec_yobi6 ec_yobi7 ec_yobi8 ec_yobi9 ec_yobi10 ec_yobi11 ec_yobi12 ec_yobi13 ec_yobi14 ec_yobi15 -------- と値が違っているのを確認しました。 こちらが原因のようですね……
Toyoshima

2016/01/27 04:43

これは随分と違いますね・・・^^; これが原因とみて間違いなさそうですが、 お使いのSQLの入手方法が気になりますね・・・。
moitaro

2016/01/27 05:43

ありがとうございます。 上記値は show columns from products_set です。 sqlはphpmyadminのエクスポートで データベース "moto" からテーブルをエクスポート 詳細 sql エンコーディング変換無し でやりました。 しょうがないので DROP TABLE saki_3.orders DROP TABLE saki_3.products_set : と全部Dropした後 phpmyadminからココにテーブルをコピーします。 コピー先に元からあったテーブルは 昔データをコピーしていたつもりなのがそのまま残っていたようです。 phpmyadminからテーブルを選んで >テーブルを (データベース).(テーブル) にコピーする: でテーブルがあったら上書きするとのフラグがあれば便利だと思ってます。 以上ご連絡いたします。 ありがとうございました。
guest

0

元テーブルのcreate table文を提示していただかないと、正しいかと言われても答えられる人はいないかと。

投稿2016/01/26 12:44

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2016/01/27 01:48

DROP TABLE IF EXISTS `products_set`; CREATE TABLE IF NOT EXISTS `products_set` ( `parent_products_id` int(11) NOT NULL COMMENT '親商品', `child_products_id` int(11) NOT NULL default '0' COMMENT '子商品', `child_products_quantity` int(11) NOT NULL default '0' COMMENT '子数量', `products_set_date_added` datetime NOT NULL default '0001-01-01 00:00:00', `products_set_last_modified` datetime default NULL, `products_set_status` tinyint(1) NOT NULL default '0', `products_sort_order` int(11) NOT NULL default '0' COMMENT '並び順', PRIMARY KEY (`parent_products_id`,`child_products_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; でした。失礼しました。
moitaro

2016/01/27 04:38

↓で返答した際に気がついたのですが -------- DROP TABLE IF EXISTS `orders`; CREATE TABLE IF NOT EXISTS `orders` ( `orders_id` int(11) NOT NULL auto_increment, `customers_id` int(11) NOT NULL default '0', `customers_public_id` int(1) NOT NULL, `customers_name` varchar(64) NOT NULL default '', `customers_company` varchar(255) NOT NULL, `customers_company_post` varchar(255) NOT NULL, `customers_street_address` varchar(64) NOT NULL default '', `customers_suburb` varchar(32) NOT NULL, `customers_city` varchar(32) NOT NULL default '', `customers_postcode` varchar(10) NOT NULL default '', `customers_state` varchar(32) NOT NULL, `customers_country` varchar(32) NOT NULL default '', `customers_telephone` varchar(32) NOT NULL default '', `customers_email_address` varchar(96) NOT NULL default '', `customers_address_format_id` int(5) NOT NULL default '0', `delivery_public_id` int(1) NOT NULL, `delivery_name` varchar(64) NOT NULL default '', `delivery_company` varchar(255) NOT NULL, `delivery_company_post` varchar(255) NOT NULL, `delivery_street_address` varchar(64) NOT NULL default '', `delivery_suburb` varchar(32) NOT NULL, `delivery_city` varchar(32) NOT NULL default '', `delivery_postcode` varchar(10) NOT NULL default '', `delivery_state` varchar(32) NOT NULL, `delivery_country` varchar(32) NOT NULL default '', `delivery_address_format_id` int(5) NOT NULL default '0', `billing_public_id` int(1) NOT NULL, `billing_name` varchar(64) NOT NULL default '', `billing_company` varchar(255) NOT NULL, `billing_company_post` varchar(255) NOT NULL, `billing_street_address` varchar(64) NOT NULL default '', `billing_suburb` varchar(32) NOT NULL, `billing_city` varchar(32) NOT NULL default '', `billing_postcode` varchar(10) NOT NULL default '', `billing_state` varchar(32) NOT NULL, `billing_country` varchar(32) NOT NULL default '', `billing_address_format_id` int(5) NOT NULL default '0', `payment_method` varchar(128) NOT NULL default '', `payment_module_code` varchar(32) NOT NULL default '', `shipping_method` varchar(128) NOT NULL default '', `shipping_module_code` varchar(32) NOT NULL default '', `coupon_code` varchar(32) NOT NULL default '', `cc_type` varchar(20) NOT NULL, `cc_owner` varchar(64) NOT NULL, `cc_number` varchar(32) NOT NULL, `cc_expires` varchar(4) NOT NULL, `cc_cvv` blob NOT NULL, `last_modified` datetime NOT NULL, `date_purchased` datetime NOT NULL, `orders_status` int(5) NOT NULL default '0', `orders_date_finished` datetime NOT NULL, `currency` char(3) NOT NULL, `currency_value` decimal(14,6) NOT NULL, `order_total` decimal(14,2) NOT NULL, `order_tax` decimal(14,2) NOT NULL, `paypal_ipn_id` int(11) NOT NULL default '0', `ip_address` varchar(96) NOT NULL default '', `delivery_telephone` varchar(32) NOT NULL, `delivery_fax` varchar(32) NOT NULL, `billing_telephone` varchar(32) NOT NULL, `billing_fax` varchar(32) NOT NULL, `customers_fax` varchar(32) NOT NULL, `customers_name_kana` varchar(128) NOT NULL, `delivery_name_kana` varchar(128) NOT NULL, `billing_name_kana` varchar(128) NOT NULL, `ec_dempyoukubun` int(1) NOT NULL default '0', `ec_kingaku` int(12) NOT NULL, `ec_nouhinyoteibi` date NOT NULL default '0000-00-00', `ec_nouhinyoteijikan` time NOT NULL, `ec_takkyuubintoiawasebangou` char(20) NOT NULL, `ec_butsuryuuiraibangou` int(12) NOT NULL, `ec_kuchikazu` int(12) NOT NULL, `ec_butsuryuusoushinnichiji` date NOT NULL default '0000-00-00', `ec_sakujokubun` int(1) NOT NULL default '0', `ec_shoppukodo` int(16) NOT NULL, `ec_kadokodo` int(12) NOT NULL, `ec_shukkasakikubun` int(12) NOT NULL default '0', `ec_fukusuushukkasaki` int(12) NOT NULL, `ec_komento` char(250) NOT NULL, `ec_juchuuzanfuragu` int(12) NOT NULL default '0', `ec_shukkabi` date NOT NULL default '0000-00-00', `ec_nyukinyoteibi` date NOT NULL default '0000-00-00', `ec_nyukinfuragu` int(12) NOT NULL default '0', `ec_nyukimbi` date NOT NULL default '0000-00-00', `ec_kyanserufuragu` int(12) NOT NULL default '0', `ec_kyanserubi` date NOT NULL default '0000-00-00', `ec_kyanserumerufuragu` int(12) NOT NULL default '0', `ec_nyukinkingaku` int(12) NOT NULL, `ec_hempinkingaku` int(12) NOT NULL, `ec_osorifuragu` int(12) NOT NULL default '0', `ec_kakutokupointosuu` int(12) NOT NULL, `ec_bonasupointosuu` int(12) NOT NULL, `ec_shiyoupointosuu` int(12) NOT NULL, `ec_pointofuragu` int(12) NOT NULL default '0', `ec_noshigami` int(1) NOT NULL, `ec_noshigamina` char(20) NOT NULL, `ec_noshigamiatena` char(40) NOT NULL, `ec_tsuushinran` char(50) NOT NULL, `ec_unsougyousha` int(12) NOT NULL, `ec_memo` text NOT NULL, `ec_hosttorikomi` int(12) NOT NULL, `ec_kompeifuragu` int(12) NOT NULL default '0', `ec_merusoushinfuragu` int(12) NOT NULL default '0', `ec_tokusokufuragu` int(12) NOT NULL default '0', `ec_shukkamerufuragu` int(12) NOT NULL default '0', `ec_nyukimmerufuragu` int(12) NOT NULL default '0', `ec_seikyuushohakkoubi` date NOT NULL default '0000-00-00', `ec_shukkakubun` int(12) NOT NULL default '0', `ec_butsuryuusoushinkubun` int(12) NOT NULL default '0', `ec_yobi1` int(12) NOT NULL, `ec_yobi2` int(12) NOT NULL, `ec_yobi3` int(12) NOT NULL, `ec_yobi4` int(12) NOT NULL, `ec_yobi5` int(12) NOT NULL, `ec_yobi6` int(12) NOT NULL, `ec_yobi7` int(1) NOT NULL, `ec_yobi8` int(1) NOT NULL, `ec_yobi9` int(1) NOT NULL, `ec_yobi10` char(100) NOT NULL, `ec_yobi11` char(100) NOT NULL, `ec_yobi12` char(100) NOT NULL, `ec_yobi13` char(15) NOT NULL, `ec_yobi14` char(15) NOT NULL, `ec_yobi15` char(15) NOT NULL, PRIMARY KEY (`orders_id`), KEY `idx_status_orders_cust_zen` (`orders_status`,`orders_id`,`customers_id`), KEY `idx_date_purchased_zen` (`date_purchased`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3244 ; -------- ですね…… SQLでのデータコピーにエラーがあったと思ってきました…… コメントありがとうございます。
guest

0

提示されたSQLの重要な部分が見えないので判別できませんが、SQLの FROM の後はtest_tabel(test_table?)になっていますか?

投稿2016/01/26 10:57

ao_love

総合スコア441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2016/01/27 02:03

コメントありがとうございます。 あ…… ```sql show columns from orders ``` なのでordersですねっ もしかして上記ご返答頂いた方々に誤った情報を伝えている予感がします……
guest

0

自己解決

コピー先に古いテーブルがあり
phpmyadminからエクスポートしたsql文を読み込ませるだけでは
テーブル情報が古いままで正常にsqlを読み込ませる事は出来なかった模様でした。

なのでコピー先の古いテーブルを一旦削除し
sql文を読み込ませれば正常に動作すると予想されます。
(テーブルの数が膨大なのでまだ未確認)

皆様暖かいご返答ありがとうございました。

投稿2016/01/27 06:00

moitaro

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コピー先に古いテーブルがあり
phpmyadminからエクスポートしたsql文を読み込ませるだけでは
テーブル情報が古いままで正常にsqlを読み込ませる事は出来なかった模様でした。

なのでコピー先の古いテーブルを一旦削除し
sql文を読み込ませれば正常に動作すると予想されます。
(テーブルの数が膨大なのでまだ未確認)

皆様暖かいご返答ありがとうございました。

投稿2016/01/27 05:58

moitaro

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問