2017-03-06 14 views
0

ALTERを使用してテストテーブルに新しいカラム(authorID)を追加しようとしていますが、わかっていない特定の値が必要です。mysql選択したカラムを追加するテーブルを変更する

以下を実行しようとしていますが、SQLエラーが発生しています。これが可能ですか、もし私がどこに間違ってしまったのですか?

SELECT id FROM authors WHERE emailAddress = 'UNASSIGNED' into @unassignedID; 
ALTER TABLE Tests ADD COLUMN authorID INT NOT NULL DEFAULT @unassignedID; 

Authorsテーブル:

CREATE TABLE authors 
(
    ID INT NOT NULL AUTO_INCREMENT, 
    emailAddress VARCHAR(100) NOT NULL UNIQUE, 
    regionID INT NOT NULL, 
    PRIMARY KEY(ID) 
); 

テストテーブル:

CREATE TABLE Tests 
(
    testID INT NOT NULL AUTO_INCREMENT, 
    Title VARCHAR(100) DEFAULT NULL, 
    PRIMARY KEY(testID) 
); 
+2

いいえ、それはそのように動作しません。 alter tableの後に、挿入または更新が必要です(テストテーブルにレコードがあるかどうかによって異なります)。挿入が必要な場合は、 'insert ... select ...代わりに'を使用してください。また、このようなセッション変数に結果のリストを取得することはできません。 – Shadow

答えて

0

あなたはpreparedstatementを使用することができます。

SELECT id into @unassignedID FROM authors WHERE emailAddress = 'UNASSIGNED' limit 1; 
SET @sql = CONCAT('ALTER TABLE Tests ADD COLUMN authorID INT NOT NULL DEFAULT ',@unassignedID); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
関連する問題