[英]Alias for column name on a SELECT * join
我有两个表-客户和个人。 它们在两个表中均由personID
链接。
我正在尝试创建一个视图。
我试过了:
SELECT * FROM client INNER JOIN person ON client.personID = person.personID
它不喜欢说Duplicate column name 'personID
。
我想如果您使用table.column
作为标识符很好。 我尝试使用单引号和不使用单引号。
如果我想要特定的列EG client.personID AS perID
,我可以做一个别名,但是当它们是JOIN定义的一部分时,我client.personID AS perID
如何为此位置IE中的列做别名。
我一直在寻找并尝试了一个多小时,但找不到它。
编辑:这是一个关于SELECT *联接中别名列的特定问题。 每个人似乎都说放在显式列中。 我知道该怎么做。 我故意要使用* JOIN进行开发工作。 这将是一个很小的数据库,因此即使它留在里面也不重要。哦, 这只是一个问题,以VIEW的形式存储,而不是以SQL查询或少量代码的形式存储 。
看来您必须使用别名为您的列名加上别名。
SELECT client.column1 as col1, client.column2 as col2, person.column1 as colp1 FROM client INNER JOIN person ON client.personID = person.personID
当然,将列名称替换为真实的列名称,因为使用更具吸引力的别名
让我们知道是否有帮助
我尝试在mySQL 5.5和5.6中使用sqlfiddle创建2个表
看到链接: http : //sqlfiddle.com/#!9/e70ab/1
它按预期工作。
也许您可以共享表架构。
这是示例代码:
CREATE TABLE Person
(
personID int,
name varchar(255)
);
CREATE TABLE Client
(
ID int,
name varchar(255),
personID int
);
insert into Person values(1, 'person1');
insert into Person values(2, 'person2');
insert into Person values(3, 'person3');
insert into Client values(1, 'client1', 1);
insert into Client values(2, 'client2', 1);
insert into Client values(3, 'client1', 1);
SELECT * FROM client
INNER JOIN person
ON client.personID = person.personID;
SELECT
c.*,
p.`all`,
p.need,
p.`fields`,
p.`of`,
p.person,
p.`table`,
p.without,
p.personID_field
FROM client c
INNER JOIN person p
ON p.personID = c.personID
尝试指定要显示的所有列名,而不是使用*列出列名以及两个表共有的表名,例如不要说personID,键入client.personID
在SQL中,顶级SELECT
语句允许两次产生相同的列名。 嵌套的SELECT
,派生表或视图的任何形式都必须产生唯一的列名。 这就是为什么联接两个表并仅从表中选择所有列会在视图中产生问题的原因。
通常,人们会通过公认的前缀命名约定对视图中的所有列添加前缀。
CREATE VIEW v_client_person AS
SELECT
client.clientID AS clie_clientID,
client.name AS clie_name,
client.personID AS clie_personID,
person.personID AS pers_personID,
person.name AS pers_name
FROM ...
这是一个好主意,因为您可以轻松地从这种视图中消除任何列的歧义。
如果personID
是两个表之间唯一的冲突列,则可以使用JOIN .. USING
作为解决方法:
CREATE VIEW v_client_person AS
SELECT * FROM client INNER JOIN person USING (personID)
在包括MySQL在内的大多数数据库中, USING
都具有很好的效果,即在生成的记录中仅产生一次join列,而与它源自哪个表无关。
SELECT *
的一般说明 但是,一般而言,您不应在视图中使用SELECT *
,而应按照wmehanna的建议或在我之前的注释中明确列出并命名所有列。 有几个原因您应该省略SELECT *
:
SELECT *
不一定是一个好主意的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.