簡體   English   中英

使用子選擇更改表

[英]Alter table using sub select

我有兩張桌子。 一個是字段信息表,另一個是字段數據表。

默認情況下,所有字段數據表列都設置為某種文本字段(varchar,text等)

我想做的是這個。 而不是創建手動ALTER TABLE查詢:

ALTER TABLE `field_data` 
CHANGE COLUMN `field_id_2` `field_id_2` decimal NOT NULL, 
CHANGE COLUMN `field_id_3` `field_id_3` decimal NOT NULL,
CHANGE COLUMN `field_id_22` `field_id_22` decimal NOT NULL,
CHANGE COLUMN `field_id_23` `field_id_23` decimal NOT NULL,
CHANGE COLUMN `field_id_25` `field_id_25` decimal NOT NULL,
CHANGE COLUMN `field_id_27` `field_id_27` decimal NOT NULL,
CHANGE COLUMN `field_id_30` `field_id_30` decimal NOT NULL,
CHANGE COLUMN `field_id_66` `field_id_66` decimal NOT NULL,
CHANGE COLUMN `field_id_72` `field_id_72` decimal NOT NULL;

我想基於field_info表編寫動態ALTER TABLE查詢,現在我通過執行此查詢獲得這些字段ID:

SELECT field_id FROM `field_info` WHERE `field_type` = 'a_decimal_field'

返回值:2,3,22,23等。

所以我需要一個查詢(如果可能的話),根據子選擇將field_id_連接到每個子選擇的結果來改變表,並將該列的類型更改為十進制。

我知道我可以通過構建查詢在php中執行此操作,但我特別尋找一個純mysql解決方案,如果可能的話。

SELECT CONCAT('ALTER TABLE `field_data` ', 
  GROUP_CONCAT(' CHANGE COLUMN `field_id_', field_id, '` ',
    ' `field_id_', field_id, '` DECIMAL NOT NULL')) 
FROM `field_info` 
WHERE `field_type` = 'a_decimal_field'
INTO @sql;

PREPARE stmt FROM @sql;

EXECUTE stmt;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM