【问题标题】:What do the “l” and “p” mean in this SQL statement?这个 SQL 语句中的“l”和“p”是什么意思?
【发布时间】:2013-12-20 04:20:55
【问题描述】:

我有以下语句从多个表中过滤掉一个结果。我不太了解tablename 之后的panothertablename 之后的l。它们是通用的还是有目的的?

SELECT id, title, l.id, username FROM tablename p JOIN anothertablename l ON (l.id = p.id) WHERE p.id='15' LIMIT 1

【问题讨论】:

    标签: mysql sql phpmyadmin


    【解决方案1】:

    那些叫做别名

    这只是一个缩写,而不是总是使用完整的表名。

    想象一下,如果您有两个名为 Products_Orders_itemsCustomers_orders_items 的表,如果两者都有列 id,那么您将在 JOIN 中编写:

    SELECT * 
    FROM Products_Orders_items
    INNER JOIN Customers_orders_items 
        ON Customers_orders_items.id = Products_Orders_items.id
    WHERE Customers_orders_items.otherField = 'bla';
    

    使用别名可以使其更易于阅读:

    SELECT * 
    FROM Products_Orders_items a
    INNER JOIN Customers_orders_items b ON a.id = b.id
    WHERE b.otherField = 'bla';
    

    还有一些情况下,在使用派生表时必须使用like,比如:

    SELECT * 
    FROM (
        SELECT * 
        FROM Products_Orders_items a
        INNER JOIN Customers_orders_items b ON a.id = b.id
        WHERE b.otherField = 'bla'
    ) a
    

    如果你在这里不使用别名,查询会给你一个错误。

    【讨论】:

    • 我的投票应该把你的声誉变成 5 位数。你欠我一杯啤酒。
    • @DanBracuk。嗯。感谢您的推动:)
    • 谢谢!两个都是很好的答案,但你是第一个来的,很酷的人能把你推到 5 位数(10,000+ 点)...别人打败了我...
    【解决方案2】:

    这个语法

    FROM tablename p
    

    JOIN tablename p
    

    为表名创建一个别名。在大多数情况下,它只是一种缩短语句的方法,因为您可以使用较短的名称代替完整的表名。

    但是,在某些情况下需要别名:当您需要在同一个查询中多次引用同一个表时,您必须创建一个别名来消除您的语句的歧义。

    需要别名的具体示例是同一张表上的子查询和自连接。

    这是一个带有子查询的查询示例:

    SELECT
    FROM Orders o
    JOIN OrderItem oi on o.ID=oi.OrderID
    JOIN Item i on i.ID=oi.ItemID
    WHERE EXISTS (
        SELECT *
        FROM OrderItem oi2
        JOIN Item i2 ON i2.ID=oi2.ItemId
        WHERE i2.Description='BACKPACK'
          AND oi2.OrderID=o.ID
    )
    

    以上查询查找包含背包的所有订单。请注意,ItemOrderItem 表需要分别包含两次,因此它们有多个别名。

    以下是自连接查询示例:

    SELECT
        e.Name as EmployeeName
    ,   m.Name as ManagerName
    FROM EMPLOYEE e
    OUTER JOIN EMPLOYEE m ON m.ID=e.ManagerID
    ORDER BY m.Name, e.Name
    

    在上面,同一个表EMPLOYEE 在同一个查询中被引用了两次,因为它参与了两个不同的角色——作为员工和作为经理。为表提供两个别名可以让我们消除连接条件 m.ID=e.ManagerID 的歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2015-03-26
      • 2017-03-20
      • 1970-01-01
      • 2013-07-13
      • 2012-01-05
      • 2021-12-25
      相关资源
      最近更新 更多