[英]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.