簡體   English   中英

'on子句'中的MySQL未知列

[英]MySQL Unknown column in 'on clause'

我的查詢看起來像

SELECT t2.id, t3.id, t3.sys_modified_date, t3.sys_created_date, 
    t3.email, t3.enabled, t3.password, t3.passwordagain, t4.id, 
    t4.sys_modified_date, t4.sys_created_date, t4.job, t4.name, 
    t4.surname, t3.retrivalHash, t3.username 
FROM Customer_Contractor t0 INNER JOIN Contractor t1 ON t0.contractor = 
    t1.id INNER JOIN User t3 ON t2.id = t3.partyId LEFT OUTER JOIN 
    Profile t4 ON t3.profileId = t4.id, Party t2 
WHERE t0.customer = ? 
ORDER BY t2.id ASC 

我收到錯誤:

'on子句'中的未知列't2.id'

我不知道有什么問題,請幫幫我。

在您的查詢中, Party t2與其他ANSI-92連接表的范圍不同 - 這就是INNER JOIN User t3 ON t2.id = t3.partyId失敗的原因。

我懷疑你想要的東西:

SELECT t2.id, t3.id, t3.sys_modified_date, t3.sys_created_date, 
    t3.email, t3.enabled, t3.password, t3.passwordagain, t4.id, 
    t4.sys_modified_date, t4.sys_created_date, t4.job, t4.name, 
    t4.surname, t3.retrivalHash, t3.username 
FROM Customer_Contractor t0 
INNER JOIN Contractor t1 ON t0.contractor = t1.id 
INNER JOIN Party t2 ON t1.id = t2.id
INNER JOIN User t3 ON t2.id = t3.partyId 
LEFT OUTER JOIN Profile t4 ON t3.profileId = t4.id
WHERE t0.customer = ? 
ORDER BY t2.id ASC 

正確。 首次使用別名時,沒有帶別名t2

你這樣做

Customer_Contractor t0
INNER JOIN
Contractor t1 ON t0.contractor = t1.id
INNER JOIN
User t3 ON t2.id = t3.partyId
LEFT OUTER JOIN 
Profile t4 ON t3.profileId = t4.id
CROSS JOIN
Party t2 

當我懷疑你想要這個(真的嗎?一個交叉連接?)

Customer_Contractor t0
INNER JOIN
Contractor t1 ON t0.contractor = t1.id
CROSS JOIN
Party t2 
INNER JOIN
User t3 ON t2.id = t3.partyId
LEFT OUTER JOIN 
Profile t4 ON t3.profileId = t4.id

您需要顯式連接到Party表(別名為t2)。 沒有這個JOIN,on條件就沒有意義了。

在不知道表格結構的情況下,很難知道如何明確加入Party。

ON子句只能“看到”在同一個表引用組中的ON子句左側定義的表別名,換句話說,在同一個連接組中。

t2別名既不在引用它的特定ON子句的左側,也不在同一個表引用組中。 (不同的組用逗號分隔。)

WHERE子句是唯一可以引用所有表引用組中定義的別名的位置。 但如果我是你,我會用適當的顯式連接替換該逗號連接。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM