電気ウナギ的○○

About Home

定義だけコピーして空の新しいテーブルを作る方法

shinoda (2022年2月 3日 13:25)
他人が作った SQL Server を使う VB.NET のソースを修正していたら、

SELECT TOP 0 * INTO new_hoge FROM org_hoge 

みたいな SQL を発行してるんで、「0行だけ取ってきて新しいテーブルにインサートって何?」って思ったら、これ、定義だけコピって新しいテーブルを作る方法なんじゃね。

へえ、SQL Server じゃこんなことできるんだ・・・と思って、PostgreSQL で同じように、

SELECT * INTO new_hoge FROM org_hoge LIMIT 0 OFFSET 0

ってやってみたら、org_hoge の定義で新しい空のテーブル new_hoge が作られた。

「へえ」と。俺は職業プログラマなので、他のテーブルと同じ定義で空のテーブルを作るときも、ちゃんと CREATE TABLE 文を書いて作ってた。どっちみち、設計資料として必要だしね。それに、たまたまこの長い人生の中で、プログラム内で(例えばワークテーブルを作るとか?)こういうことをする機会も無かったので、こんな簡単な方法知らなかったよ(笑)
知っている人にとっては「なんだ、そんな簡単なこと!」なんだろうけど(笑)

で、MySQL でも、

SELECT * INTO new_hoge FROM org_hoge LIMIT 0,0

とやってみたら、これは

ERROR 1327 (42000): Undeclared variable: new_hoge

とエラーになった。new_hoge は宣言されてねえぞ・・・って?

調べてみると、MySQL では SELECT * INTO TABLE <新しいテーブル>・・・という書き方はサポートされていなかった。マニュアルには、

INSERT INTO new_hoge SELECT * FROM org_hoge LIMIT 0,0

にしろ・・・と書いてあるらしいが、そもそも MySQL にはこういう方法での CREATE TABLE 機能は無いそうで、この場合も「new_hoge なんてテーブルは無ぇよ!」と怒られるらしい。

結局、MySQL では「SELECT した情報で空のテーブルを新しく作る」ということはできないようだ。

素直に、

CREATE TABLE new_hoge LIKE org_hoge

でテーブルを作りなさいということだね。

他の DBMS ではどうなのかは面倒くさいので調べていない(笑)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6163

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE