2017-07-07 75 views
0

聯接對我來說一直很敏感。 我想抓住多個表中的多個列。 我的左加入爲product p num表導致錯誤:Error Code: 1066. Not unique table/alias: 'product p num'Mysql加入多表錯誤:不是唯一表/別名

我看到此錯誤顯示爲其他stackoverflow示例。我嘗試修改各種版本,但不知道我失蹤了什麼。

SELECT tbls.SNum,tblmar.AssemPart, tblmar.wifi, `product p num`.`Customer Name` 

FROM floor.tbls, manu.tblmar, def.`product p num` 

LEFT JOIN tblmar ON tbls.PartNum = tblmar.AssemPart 
LEFT JOIN `product p num` on tblmar.AssemPart = `product p num`.`product p` 

WHERE tblmar.AssemPart IS NOT NULL 
AND `product p num`.`Customer Name` = 'Google' 
AND tblmar.wifi = 1 
ORDER BY `product p num`.`product p`; 
+1

下面是一個建議:不要將舊學校的逗號語法用於連接操作和新的JOIN關鍵字語法混合使用。此查詢中的FROM子句引用*五*表。 (有兩個引用'tblmar'和兩個引用'product p num',我認爲你只需要修改那個'FROM'行,並且刪除(包括)第一個逗號後的所有內容(我也建議你避免使用空格(和其他不允許的字符)作爲表名的一部分,使用下劃線而不是空格,例如'product_p_num'。) – spencer7593

+0

我修改了像Jacobm001這樣的行,並修復了這個問題。直到我有別名錯誤,所以沒有意識到我的'從'造成的,沒有意識到'連接'取代宣佈多個表@ spencer7593 – narue1992

+0

@ spencer7593也..表命名不是我的。我知道不要用空格來命名它們 – narue1992

回答

1

問題是因爲您多次加入相同的表格而沒有對其中的任何一個進行別名。你有意加入他們兩次嗎?我看不出你爲什麼會故意在這裏做。

你想要的邏輯可能是這樣的:

SELECT 
    tbls.SNum 
    , tblmar.AssemPart 
    , tblmar.wifi 
    , `product p num`.`Customer Name` 
FROM 
    floor.tbls 
    LEFT JOIN tblmar 
    ON tbls.PartNum = tblmar.AssemPart 
    LEFT JOIN `product p num` 
    on tblmar.AssemPart = `product p num`.`product p` 
WHERE 
    tblmar.AssemPart IS NOT NULL 
    AND `product p num`.`Customer Name` = 'Google' 
    AND tblmar.wifi = 1 
ORDER BY 
    `product p num`.`product p`; 
+0

好,所以問題在於,當我使用連接時'From'不能是全部表格嗎? – narue1992

+0

@ narue1992問題是你用的d兩種不同風格的加入。你只需要加入每個表格一次。每個名字只能出現在'from'子句中,除非它是別名(這裏你不需要)。 'from'子句是'from'和'where'之間的所有內容。 – Jacobm001

0

您正在做兩次引用同一個表的查詢。

如果你想這樣做,你需要別名這些表。例如:

SELECT * 
FROM table AS alias1 
LEFT JOIN table AS alias2 
1

你混合了語法如何加入表2種不同的方式。你在你的起始條款中列出了所有的表格,然後你再次加入。

相關問題