【问题标题】:SQL complaining about an existing fieldSQL 抱怨现有字段
【发布时间】:2015-09-25 21:11:32
【问题描述】:

以下查询尝试执行可以表示为@users.courses(其中@user.id = 1)的操作。我提供此信息是因为我不确定这是否正确,因为查询没有运行

SELECT * FROM courses WHERE courses.id = 
 courses_users.user_id AND courses_users.user_id = 1

SQL 抱怨:

#1054 - 'where 子句'中的未知列'courses_users.user_id'

我确定所有这些字段都存在,所以我不确定我做错了什么。

【问题讨论】:

    标签: mysql sql ruby-on-rails


    【解决方案1】:

    您的 where 子句引用了 courses_users,但此表从未出现在 wherejoin 子句中。

    您应该将其添加到from 子句中:

    SELECT * 
    FROM   courses, courses_users -- Here!
    WHERE  courses.id = courses_users.user_id AND 
           courses_users.user_id = 1
    

    或者,更好的是,使用明确的join 子句:

    SELECT * 
    FROM   courses
    JOIN   courses_users ON courses.id = courses_users.user_id -- Here!
    WHERE  courses_users.user_id = 1
    

    【讨论】:

    • 如果我发现没有JOIN 的查询更容易理解,是不是有问题?是否考虑bad code
    • 隐式连接(第一个示例)在大多数 RDBMS 中被认为已弃用。它们没有被严格禁止,但继续使用它们通常被认为是一种不好的做法。
    • 另外我刚刚发现要实现我使用 rails 语法描述的内容,第二行必须替换为 courses.id = courses_users.course_id
    【解决方案2】:

    您缺少JOIN。该声明不知道courses_users,除非您对其进行JOIN。为此,您的查询需要如下所示:

    SELECT * 
    FROM courses 
    JOIN courses_users ON
        courses.id = courses_users.user_id 
    WHERE 
        courses_users.user_id = 1
    

    【讨论】:

      【解决方案3】:

      您是否尝试仅显示 courses.id 与不同表中的不同值匹配的记录?如果是这样,您需要将两个表连接在一起。如果没有连接,您无法比较来自两个不同表的两个不同字段。

      这里有一个关于 SQL 连接如何工作的教程:SQL Joins

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2019-08-20
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        相关资源
        最近更新 更多