php - 子选择查询中的表名别名范围

标签 php mysql sql phpmyadmin

请查看下面的查询 - 我得到 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

最佳答案

根据您的评论,相关性不能放在相关子查询的 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

关于php - 子选择查询中的表名别名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049115/

相关文章:

java - org.hibernate.MappingException : Could not determine type for: java. util.Set,在表 : Company, 的列 : [org. hibernate.mapping.Column(users)]

sql - Oracle - 僵尸表

php - Google 云端硬盘服务帐户上传的位置

php - 指定了 Vagrantfile PHP v5.6 但安装了 v5.5

mysql - 如何将字段的默认值设置为 '0000-00-00 00:00:00' ?

MySQL(RDBMS)用于订单/运输信息,MongoDB(NoSQL)用于产品信息。这可以吗?

java - SQL迭代器的实现

sql - T-SQL 动态枢轴

php - 使用 PHP PDO 进行动态查询

javascript - 无法加载资源 : braintree js php integration aws ec2 lamp stack