小编典典

在SQL中何时需要为表名赋予别名?

sql

我在用多个JOIN进行查询时注意到,除非给表名之一指定别名,否则查询将无法工作。

这是一个简单的例子来说明这一点:

不起作用

SELECT subject
from items
join purchases on items.folder_id=purchases.item_id
join purchases on items.date=purchases.purchase_date
group by folder_id

这样

SELECT subject
from items
join purchases on items.folder_id=purchases.item_id
join purchases as p on items.date=p.purchase_date
group by folder_id

有人可以解释吗?


阅读 361

收藏
2021-03-23

共1个答案

小编典典

您在查询中使用同一个表购买两次。您需要通过提供不同的名称来区分它们。

您需要提供一个别名:

  • When the same table name is referenced multiple times

想象两个人有完全相同的约翰·多伊。如果您致电John,双方都会回复您的电话。您不能给两个人使用相同的名字,并假设他们会知道您要呼叫的人。同样,当您给相同的结果集命名为完全相同时,SQL无法识别要从中获取值的结果集。您需要使用不同的名称来区分结果集,以免使SQL引擎感到困惑。

脚本1t1t2 是此处的别名

SELECT      t1.col2
FROM        table1 t1
INNER JOIN  table1 t2
ON          t1.col1 = t2.col1
  • When there is a derived table/sub query output

如果某人没有名字,您可以打电话给他们,并且由于您无法给该人打电话,因此他们不会回复您。同样,当您生成派生表输出或子查询输出时,SQL引擎对此并不了解,也不会调用。因此,您需要为派生的输出命名,以便SQL引擎可以适当地处理该派生的输出。

脚本2t1 是此处的别名。

SELECT col1
FROM
(
    SELECT col1
    FROM   table1
) t1
2021-03-23