【问题标题】:SQL 1064 Error, Syntax going unseenSQL 1064 错误,语法不可见
【发布时间】:2017-12-02 00:31:37
【问题描述】:
SELECT
    i.*,
    ii.file_location
    FROM group_shop_item i, group_shop_itemimage ii, group_shop_brand b 
    WHERE 
    i.brand_id = b.id
    AND 
    b.brand_status_id = 1
    AND 
    i.is_deleted = 0
    AND 
    i.is_displayed = 1
    AND
    i.id = ii.item_id
    AND 
    ii.is_main = 1
    AND 
    i.deal_participate = 1 
    AND  
    i.brand_label_id IS NOT NULL
 ORDER BY i.datetime_modified DESC;

此 SQL 查询不断向我抛出 1064。它似乎在我尝试使用和不使用 i 表变量的最后一行。我一辈子都无法捕捉到错误,谁能借我一双眼睛?

我将此作为 RAW 查询放入内置的 Django 函数中,并使用字符串连接构建此查询。这个复制粘贴直接来自我从命令行完成的打印。当我在浏览器上运行视图时,它输出整齐,但没有读取。

【问题讨论】:

    标签: mysql sql django


    【解决方案1】:

    25 多年前采用了 ANSI 标准连接语法。 您需要停止在 from 子句中的表名之间使用逗号。

    SELECT
          i.*
        , ii.file_location
    FROM group_shop_item i
    INNER JOIN group_shop_itemimage ii ON i.id = ii.item_id
    INNER JOIN group_shop_brand b ON i.brand_id = b.id
    WHERE i.is_deleted = 0
    AND i.is_displayed = 1
    AND ii.is_main = 1
    AND i.deal_participate = 1
    AND i.brand_label_id IS NOT NULL
    AND b.brand_status_id = 1
    ;
    

    关于 1064 错误,please read this 没有确切的错误消息和确切/完整的查询,我们无法提供太多的洞察力。

    您需要注意的另一件事是“选择 *”也不是好的做法。

    【讨论】:

    • 可能还值得一提的是,“使用字符串连接构建此查询。”通常被认为是一种不安全的结构——或者至少需要非常注意字符串的来源,这样你就不会得到SQL 注入(等)问题。
    • @GregHNZ 好评!太真实了(*和连接很可能是语法错误源)。
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多