2014-06-30 23 views
-1

可有人請告訴我如何解決這個查詢到它的工作,這樣我就不會收到錯誤消息:#1066 - 不唯一的表/別名:「personal_mem」SQL錯誤 - 不是唯一的表

SELECT personal_mem.id_mem, personal_mem.fn, personal_mem.ln, personal_mem.email,  personal_mem.organisation, personal_mem.city, personal_mem.state, personal_mem.postcode, members.type, members.paid_to_date, members.username, payments_mem.payment_type 
    FROM `personal_mem` 
    LEFT JOIN personal_mem ON members.id_mem = personal_mem.id_mem 
    LEFT JOIN payments_mem ON members.id_mem = payments_mem.id_mem 
    WHERE members.paid_to_date > 1369922400 AND payments_mem.confirmed != 'TRUE' 
    ORDER BY payments_mem.payment_type 
+2

用'FROM members'替換'FROM personal_mem'# –

+1

使用不同的別名多次連接同一個表,where子句中的'members'表在哪裏。 –

回答

0

您正在加入personal_mem表,因此您在結果中使用了兩次,導致列引用不明確。

這看起來像一個錯誤,因爲你也指的是members,它沒有在任何地方聲明,你可能想要加入該表。

FROM personal_mem 
LEFT JOIN /**/ members /**/ ON members.id_mem = personal_mem.id_mem 

也許

FROM /**/ members /**/ 
LEFT JOIN personal_mem ON members.id_mem = personal_mem.id_mem 

如果這是不是一個錯誤,你需要給表的別名。

0

您將自己加入同一張表並且不會混淆任何內容。通過在名稱後面添加一些內容,使select子句中的表成爲別名。即,'personal_mem pm'和加入不同名稱'personal_mem pm2'後的一個'

然後,當您在select/where中限定列時,可以在正確的位置引用正確的列。

0

別名「personal_mem」成員的第一參考(它出現在引用「personal_mem」爲成員的加入下

SELECT personal_mem.id_mem, personal_mem.fn, personal_mem.ln, personal_mem.email,  personal_mem.organisation, personal_mem.city, personal_mem.state, personal_mem.postcode, members.type, members.paid_to_date, members.username, payments_mem.payment_type 
FROM `personal_mem` members 
LEFT JOIN personal_mem ON members.id_mem = personal_mem.id_mem 
LEFT JOIN payments_mem ON members.id_mem = payments_mem.id_mem 
WHERE members.paid_to_date > 1369922400 AND payments_mem.confirmed != 'TRUE' 
ORDER BY payments_mem.payment_type 
0

你引用的同一個表沒有alias.To解決這個問題兩次,你需要再次使用表別名personal_mem,您目前擁有personal_mem的成員,你可以把members2或下午和PM2由最後答案的建議。

SELECT personal_mem.id_mem, personal_mem.fn, personal_mem.ln 
, personal_mem.email, personal_mem.organisation, personal_mem.city 
, personal_mem.state, personal_mem.postcode, members.type, members.paid_to_date 
, members.username, payments_mem.payment_type 
FROM `personal_mem` members 
LEFT JOIN personal_mem pm ON members.id_mem = pm.id_mem 
LEFT JOIN payments_mem payment ON members.id_mem = payment.id_mem 
WHERE members.paid_to_date > 1369922400 AND payment.confirmed != 'TRUE' 
ORDER BY payment.payment_type 

我也建議使用表的別名在SELECT語句清理它起來了。

我還將payment_mem更改爲付款以保持一致。

相關問題