带CASE的where子句中的未知列

时间:2017-06-08 17:46:45

标签: mysql

这里有什么问题,或者遗失了什么?

SELECT CASE WHEN (f_username = '$username' AND table1.code = table2.code) THEN '1'
            ELSE '0'
             END as is_favorite
 FROM (
      SELECT *
        FROM favorites
       WHERE f_username='$username'
         AND code = table2.code
     ) table1
INNER JOIN (
       SELECT * 
         FROM groups
        WHERE gname LIKE '%$text%'
     ) table2

出现错误

  

未知栏' table2.code'在' where子句'

修改

我有两张桌子(团体/收藏)

组结构是: gname / code

收藏夹结构是: code / f_username

我正在寻找的是我想获取特定查询中的组列表,我想为每个组循环检查收藏夹是否基于用户名,如果他添加为喜欢与否。

2 个答案:

答案 0 :(得分:0)

错误或缺失了什么?您指的是第一个子查询中的表别名table2。该别名不在该子查询的范围内,因为您只将其定义为第二个子查询的别名。这是一个令人讨厌的SQL:AND code = table2.code。查询解析器没有到达SELECT子句,因为它试图找出它首先可用的列。

您的查询结构奇怪。您可能应该考虑简单地加入您的表格。

SELECT whatever
  FROM favorites f
  JOIN groups g ON f.code = g.code 
 WHERE f.f_username = '$username'
   AND g.gname LIKE '%$text%'

但你没有显示任何样本数据或解释你想要的结果,所以我猜测。

答案 1 :(得分:0)

我认为这就是你所追求的目标:

SELECT  gname, CASE WHEN favorites.code IS NULL THEN '0'
                ELSE '1'
                END as is_favorite
FROM    groups
WHERE   WHERE gname LIKE '%$text%'
LEFT JOIN favorites ON groups.code = favorites.code