【问题标题】:mysql subquery returns errormysql子查询返回错误
【发布时间】:2012-03-20 03:10:57
【问题描述】:
SELECT 
    upd.*,
    usr.username AS `username`,
    usr.profile_picture AS `profile_picture`
    ,(
        SELECT COUNT (like.id)
        FROM likes as like
        WHERE upd.update_id = like.item_id
           AND like.uid = 118697835834
    ) as liked_update

FROM updates AS upd
LEFT JOIN users AS usr 
    ON upd.uid = usr.uid
WHERE upd.deleted=0
    AND 
    ( upd.uid=118697835834
        OR EXISTS ( SELECT *
                    FROM   subscribers AS sub 
                    WHERE  upd.uid = sub.suid
                    AND  sub.uid = 118697835834
            )
    )
ORDER BY upd.date DESC
LIMIT 0, 15

SELECT 中的子查询返回以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
    server version for the right syntax to use near 
    'like WHERE upd.update_id = like.item_id AND l' at line 10

【问题讨论】:

    标签: php mysql sql join subquery


    【解决方案1】:

    您不能使用Like 作为别名,它是保留字

    SELECT 
        upd.*,
        usr.username AS `username`,
        usr.profile_picture AS `profile_picture`
        ,(
            SELECT COUNT (l.id)
            FROM likes as l
            WHERE upd.update_id = l.item_id
               AND l.uid = 118697835834
        ) as liked_update
    
    FROM updates AS upd
    LEFT JOIN users AS usr 
        ON upd.uid = usr.uid
    WHERE upd.deleted=0
        AND 
        ( upd.uid=118697835834
            OR EXISTS ( SELECT *
                        FROM   subscribers AS sub 
                        WHERE  upd.uid = sub.suid
                        AND  sub.uid = 118697835834
                )
        )
    ORDER BY upd.date DESC
    LIMIT 0, 15
    

    【讨论】:

      【解决方案2】:

      尽量不要在表字段名称或任何其他变量中使用“like”,因为它是 SQL 关键字 - 与 SELECT 或 AND 相同。

      【讨论】:

        【解决方案3】:

        like 是一个保留的 SQL 字

        将您的别名更改为 like 或 likeinfo,您的请求就会生效。

        【讨论】:

          【解决方案4】:

          like是SQL中的保留字;您应该为 likes 表使用不同的别名。更改您的子查询:

          SELECT
              COUNT (like.id)
          FROM
              likes as like
          WHERE
              upd.update_id = like.item_id
              AND like.uid = 118697835834
          

          类似于:

          SELECT
              COUNT (l.id)
          FROM
              likes as l
          WHERE
              upd.update_id = l.item_id
              AND l.uid = 118697835834
          

          【讨论】:

            猜你喜欢
            • 2014-02-15
            • 2017-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-21
            • 1970-01-01
            • 1970-01-01
            • 2016-07-13
            相关资源
            最近更新 更多