1

以下のクエリをご覧ください-私はUnknown column 'u.id' in 'on clause'

SELECT id, username, 

coalesce(
 (SELECT name from company c 
    INNER JOIN user_company uc 
    ON uc.user_id = u.id 
    AND c.id = uc.company_id), 'NOT-AVAILABLE' 
) companyname

FROM `user` u
4

2 に答える 2

1

それを修正する1つの方法:

SELECT u.id,
       u.username,
       COALESCE(aux.name, 'NOT-AVAILABLE') as 'companyname'
FROM `user` u
LEFT JOIN
 (SELECT user_id, name from company c 
    INNER JOIN user_company uc
    ON c.id = uc.company_id) aux ON aux.user_id = u.id

それを修正する別の方法:

SELECT u.id,
       u.username,
       COALESCE(c.name, 'NOT-AVAILABLE') AS 'companyname'
FROM `user` u
LEFT JOIN user_company uc ON uc.user_id = u.id 
LEFT JOIN company c ON c.id = uc.company_id
于 2012-06-15T10:52:23.033 に答える
1

あなたのコメントに基づいて、相関はJOIN相関サブクエリの範囲内に配置できません。

ただし、WHERE相関サブクエリの句に配置することはできます。

SELECT
  id,
  username,
  coalesce(
    (SELECT name
       FROM company      c
 INNER JOIN user_company uc
         ON c.id = uc.company_id
      WHERE uc.user_id = u.id
    ),
    'NOT-AVAILABLE'
  ) companyname
FROM
  `user` u 

それはあなたの明確な質問に答えます。クエリが構文的に失敗した理由。


ただし、相関関係全体を単純なに置き換えLEFT JOINます。

SELECT
  u.id,
  u.username,
  COALESCE(c.name, 'NOT-AVAILABLE') companyname
FROM
  `user` u 
LEFT JOIN
  `user_company` uc
      ON uc.user_id = u.id
LEFT JOIN
  `company` c
    ON c.id = uc.company_id
于 2012-06-15T11:06:21.280 に答える