MySQL组合了两列并添加到一个新列中

时间:2011-04-25 01:55:05

标签: mysql sql

我有一个MySQL表的结构如下:

+----------------+----------------+----------+
|    zipcode     |      city      |   state  |
+----------------+----------------+----------+
|     10954      |     Nanuet     |    NY    |
+----------------+----------------+----------+

我想将上面的3列组合成一列,如下所示:

+---------------------+
|      combined       |
+---------------------+
| 10954 - Nanuet, NY  |
+---------------------+

我希望将这个“组合”列添加到表的末尾,而不会破坏原来的3个字段。

4 个答案:

答案 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