【问题标题】:sql, sqlite SELECT with inner joinsql, sqlite SELECT 带内连接
【发布时间】:2012-02-07 23:10:00
【问题描述】:

我想知道如何使用内部连接器以其他方式选择一列两次。我的数据库是 sqlite,我使用 PDO db 驱动程序。

我的例子:

    SELECT
            orders.id,
            orders.order_number,
            clients.first_name,
            clients.last_name,
            users.name AS user_name
    FROM orders

    INNER JOIN clients ON
            orders.client_id = clients.id

    INNER JOIN users ON
            orders.created_by = users.id

我还想得到编辑这条记录的用户名

            orders.edited_by = users.id

如何加入本次评选?

【问题讨论】:

    标签: sql sqlite pdo


    【解决方案1】:

    您需要使用表别名。

    SELECT
            orders.id,
            orders.order_number,
            clients.first_name,
            clients.last_name,
            creator.name AS creator_user_name
            editor.name AS editor_user_name
    FROM orders
    
    INNER JOIN clients ON
            orders.client_id = clients.id
    
    INNER JOIN users creator ON
            orders.created_by = creator.id
    
    INNER JOIN users editor ON
            orders.edited_by = editor.id
    

    【讨论】:

    • 如此简单快速的回复,谢谢。 “creator_user_name”后面少了一个逗号。
    【解决方案2】:

    在你的表名中使用aliases,这样你就可以对同一个表使用多个引用。这也有助于使大型查询更易于阅读。

    SELECT
            orders.id,
            orders.order_number,
            clients.first_name,
            clients.last_name,
            createUsers.name AS creator_name,
            editUsers.name AS editor_name
    FROM orders
    
    INNER JOIN clients ON
            orders.client_id = clients.id
    
    INNER JOIN users As createUsers ON
            orders.created_by = users.id
    
    INNER JOIN users As editUsers ON
            orders.edited_by = users.id
    

    您可以根据需要使用同一张表的任意多个“实例”。

    【讨论】:

    • 您还需要在连接条件中使用表别名,就像我之前发布的 SQL 中一样...
    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多