我有一个MySQL表的结构如下:
+----------------+----------------+----------+
| zipcode | city | state |
+----------------+----------------+----------+
| 10954 | Nanuet | NY |
+----------------+----------------+----------+
我想将上面的3列组合成一列,如下所示:
+---------------------+
| combined |
+---------------------+
| 10954 - Nanuet, NY |
+---------------------+
我希望将这个“组合”列添加到表的末尾,而不会破坏原来的3个字段。
答案 0 :(得分:126)
创建列:
ALTER TABLE yourtable ADD COLUMN combined VARCHAR(50);
更新当前值:
UPDATE yourtable SET combined = CONCAT(zipcode, ' - ', city, ', ', state);
自动更新所有未来值:
CREATE TRIGGER insert_trigger
BEFORE INSERT ON yourtable
FOR EACH ROW
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state);
CREATE TRIGGER update_trigger
BEFORE UPDATE ON yourtable
FOR EACH ROW
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state);
答案 1 :(得分:22)
你确定要这么做吗?实质上,您正在复制三个原始列中的数据。从那时起,您需要确保组合字段中的数据与前三列中的数据匹配。这对您的应用程序来说是更多的开销,而更新系统的其他进程需要了解这种关系。
如果您需要数据,为什么不在需要时选择?用于选择该字段中的内容的SQL将是:
SELECT CONCAT(zipcode, ' - ', city, ', ', state) FROM Table;
这样,如果字段中的数据发生变化,则无需更新合并字段。
答案 2 :(得分:13)
向表中添加新列并执行查询:
UPDATE tbl SET combined = CONCAT(zipcode, ' - ', city, ', ', state)
答案 3 :(得分:0)
SELECT CONCAT(zipcode,' - ',city,',',state)AS from Table from TABLE