如何将两列与mysql中现有的列名称合并为一列?


74

我想使用mysql将表中的两列与现有的列名称连接起来。

一个例子:我有一个专栏FIRSTNAMELASTNAME也有很多专栏。我想将这两列与FIRSTNAME仅名称连接。

所以我这样尝试:

 SELECT *, CONCAT(FIRSTNAME, ',', LASTNAME) AS FIRSTNAME FROM `customer`;

但它显示名称为的两个字段FIRSTNAME。一个字段具有标准值,而另一个字段具有级联值。我只希望具有这些连接值的一列。我可以选择单个列,但是表中有40多个列。

有没有办法使用mysql本身删除原始列?


1
有关相关信息,请参见此问题:stackoverflow.com/questions/9122/…–
George

Answers:


92

正如aziz-shaikh所指出的那样,无法从*指令中取消单个列,但是您可以使用以下技巧:

SELECT CONCAT(c.FIRSTNAME, ',', c.LASTNAME) AS FIRSTNAME,
       c.*
FROM   `customer` c;

这样做将导致FIRSTNAME列的第二次出现采用别名,FIRSTNAME_1因此您应该能够安全地解决自定义FIRSTNAME列。您需要对表进行别名处理,因为*如果不使用别名,则在开始处以外的任何位置都将失败。

希望有帮助!


因此,仅在这种情况下,PHP编码才会采用第一列?对?
Manik

1
如果您在PHP脚本中引用“ FIRSTNAME”,则将使用该列的版本,因为真实的“ FIRSTNAME”现在将称为“ FIRSTNAME_1”。是什么使得它的工作是不是真正的事实,这是第一列,但它使用相同的别名作为原始列它的上市的原始列。这样,它会将原始列强制为另一个名称。
拉德

13

可以使用您指定所需的表列的方式,而不用在SQL语句中使用*来获取所有表列的方式。

您可以使用类似以下的SQL语句:

SELECT CONCAT(FIRSTNAME, ' ', LASTNAME) AS FIRSTNAME FROM customer;

顺便说一句,为什么您不能使用FullName而不是FirstName?像这样:

SELECT CONCAT(FIRSTNAME, ' ', LASTNAME) AS 'CUSTOMER NAME' FROM customer;

3

您可以尝试以下简单的方式来合并列:

select some_other_column,first_name || ' ' || last_name AS First_name from customer;

这适用于Oracle和Postgres。在MySQL上,您需要:SET sql_mode ='PIPES_AS_CONCAT';
大卫·博尔赫斯

1

*从查询中删除,然后使用各个列名,如下所示:

SELECT SOME_OTHER_COLUMN, CONCAT(FIRSTNAME, ',', LASTNAME) AS FIRSTNAME FROM `customer`;

使用*均值,结果中需要表的所有列。在您的情况下*还将包括FIRSTNAME。然后,您要串联一些列并使用的别名FIRSTNAME。这将创建2个具有相同名称的列。


但是有将近43列,这是唯一的方法吗?我不得不在查询中提及其他42列,例如“ select col1,col2,col3,.. etc”?
Manik

在这种情况下,如上述@oGeez所述,您可以尝试以下给出的答案:stackoverflow.com/questions/9122/…–
Aziz Shaikh

0

只需从select子句中删除*,并显式提及所有列名,然后忽略FIRSTNAME列即可。之后,将CONCAT(FIRSTNAME,',',LASTNAME)用作FIRSTNAME。上面的查询将只给您一个FIRSTNAME列。


-2

我是新手,我这样做是这样的:

Create table Name1
(
F_Name varchar(20),
L_Name varchar(20),
Age INTEGER
)

Insert into Name1
Values
('Tom', 'Bombadil', 32),
('Danny', 'Fartman', 43),
('Stephine', 'Belchlord', 33),
('Corry', 'Smallpants', 95)
Go

Update Name1
Set F_Name = CONCAT(F_Name, ' ', L_Name)
Go

Alter Table Name1
Drop column L_Name
Go

Update Table_Name
Set F_Name

您还可以在代码中包含一些解释,以使您一目了然。
安德里亚斯(Andreas)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.