2009-09-25 120 views
0

如何在不寫入長全名的情況下選擇p.Quota?現在我做從2個表中選擇。 MySql

SELECT c.id, 
     c.UserName, 
     p.Quota, 
     cs.StatusName 
    FROM CUSTOMERS AS c, 
     PRODUCTS AS p 
LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
LIMIT 1 ; 

我得到的錯誤:

ERROR 1054 (42S22): Unknown column 'c.StatusId' in 'on clause' 

但是列不退出,此代碼的工作:

SELECT c.id, 
     c.UserName, 
     cs.StatusName 
    FROM CUSTOMERS AS c 
    JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId = cs.CustomerStatusId 
LIMIT 1 ; 
+0

爲什麼你不使用另一個JOIN的產品表?在表PRODUCTS中發佈所有表的模式和外鍵的名稱。 – 2009-09-25 15:49:21

回答

2

你混合ANSI和非ANSI JOIN語法:

SELECT c.id, 
     c.UserName, 
     p.Quota, 
     cs.StatusName 
    FROM CUSTOMERS AS c, 
     PRODUCTS AS p 
    LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
    LIMIT 1 ; 

書面使用ANSI聯接:

 SELECT c.id, 
      c.UserName, 
      p.Quota, 
      cs.StatusName 
     FROM CUSTOMERS AS c 
     JOIN PRODUCTS AS p ON --JOIN criteria goes here 
    LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId = cs.CustomerStatusId 
     LIMIT 1; 

...但我不知道你正在使用的加入PRODUCTSCUSTOMERS表的標準是什麼。

+0

它現在的作品:) – 2009-09-25 16:19:27

0
SELECT c.id, 
     c.UserName, 
     p.Quota, 
     cs.StatusName 
FROM (CUSTOMERS AS c, PRODUCTS AS p) 
LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
LIMIT 1 ; 
+0

感謝您使用此代碼段,該代碼段可能會提供一些即時幫助。通過說明爲什麼這是一個很好的解決方案的問題,可以大大提高(https://meta.stackexchange.com/q/114762)其教育價值,並且可以使未來的讀者更加有用,但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 – GrumpyCrouton 2017-10-16 19:58:51

2

問題是你的隱式內部連接後跟一個左連接。 MySQL正在嘗試加入CUSTOMERSTATUSTYPES cs上的PRODUCTS p,而不考慮CUSTOMERS c。

試試這個:

SELECT 
c.id, c.UserName, p.Quota, cs.StatusName 
FROM 
CUSTOMERS AS c 
INNER JOIN PRODUCTS AS p 
LEFT JOIN CUSTOMERSTATUSTYPES as cs ON c.StatusId=cs.CustomerStatusId 
LIMIT 1

而且,現在您對記錄的客戶那些產品沒有任何條款...你只是做了充分的加入。這是你想要做的嗎?