我在用多个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
有人可以解释吗?
您在查询中使用同一个表购买两次。您需要通过提供不同的名称来区分它们。
您需要提供一个别名:
When the same table name is referenced multiple times
想象两个人有完全相同的约翰·多伊。如果您致电John,双方都会回复您的电话。您不能给两个人使用相同的名字,并假设他们会知道您要呼叫的人。同样,当您给相同的结果集命名为完全相同时,SQL无法识别要从中获取值的结果集。您需要使用不同的名称来区分结果集,以免使SQL引擎感到困惑。
脚本1 : t1 和 t2 是此处的别名
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引擎可以适当地处理该派生的输出。
脚本2 : t1 是此处的别名。
SELECT col1 FROM ( SELECT col1 FROM table1 ) t1