【问题标题】:SQL JOIN returning 3 fields with the name 'id'SQL JOIN 返回 3 个名为 'id' 的字段
【发布时间】:2013-04-06 10:41:20
【问题描述】:

我有一个使用 3 个表连接的 SQL 查询。它实际上工作正常,但是所有三个表都有一个名为“id”的字段,所以稍后当我尝试访问 id 字段时,它只访问最后一个字段中的那个。 SQL查询如下:

"SELECT * FROM professors AS p 
            JOIN schools_professors AS sp 
            ON p.school_id = sp.id
            JOIN schools AS s ON sp.school_id = s.id  WHERE p.first_name LIKE '%".
                $search."%' OR p.last_name LIKE '%".$search.
                "%' LIMIT 0, 10;"

现在,学校、教授和学校教授,都有 id 列。我如何访问教授的 ID?这是我唯一关心的一个。

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:

    在这种情况下,您不应使用*,而是手动投影列名并在其上添加ALIAS。例如,

    SELECT   ....,
             p.ID AS ProfessorID,
             s.ID AS SchoolID,
    FROM     .....
    

    作为旁注,如果变量的值(s)来自外部,则查询很容易受到SQL Injection 的攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

    【讨论】:

    • 它被包裹在 PDO 中以防止注入,我想要 * 的原因是因为我基本上想要除了第二个和第三个表的 id 之外的所有内容,大约 50 列。必须键入所有这些以摆脱两列会很痛苦。
    • 如果您仍想使用*,则为Professor and SchoolID 示例添加额外的列:SELECT *, p.ID AS ProfessorID, s.ID AS SchoolID FROM...
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多