在这个 SQL 查询中 Tmp(email) 有啥用?

Posted

技术标签:

【中文标题】在这个 SQL 查询中 Tmp(email) 有啥用?【英文标题】:What is the use of Tmp(email) in this SQL query?在这个 SQL 查询中 Tmp(email) 有什么用? 【发布时间】:2019-04-15 02:12:52 【问题描述】:

我正在使用 Db2,今天我运行了这个查询。

MERGE INTO table1 AS A 
    USING (VALUES('$user.email')) AS TMP(EMAIL) 
        ON A.EMAIL=TMP.EMAIL

那么,在这部分关键字AS,它是否将TMP创建为一个新表?

我在 mysql 中尝试了一些类比,但它告诉我错了。

select *
from table1 join
     table2 using (id) as TMP(EMAIL); 

【问题讨论】:

从您的问题中不清楚您到底想做什么。请提供 table1 定义 (DDL)、示例数据以及您的 MERGE 语句应该对哪些数据进行更改。 【参考方案1】:

AS TMP(EMAIL是一个相关子句,它是table reference的一部分

它为VALUES 语句生成的表分配一个“别名”(相关名称),并为其唯一的列分配一个名称。 MySQL v8 还 supports this syntax 用于子选择表。

您在第二个示例中的错误是您将关联子句与其表名分开。它应该看起来像这样(请注意,您不能在此处分配列别名,因为 table2 不是子选择):

select *
from table1 join
     table2 as TMP using (id); 

在此示例中,您可以还指定一个列别名:

select *
from table1 join
     (select 'foo@bar.com') as TMP (EMAIL) using (EMAIL); 

【讨论】:

以上是关于在这个 SQL 查询中 Tmp(email) 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

有啥办法可以缩短这个 SQL 查询

这个 SQL 查询有啥问题[重复]

这个 DB2 SQL 查询有啥问题?

有啥办法可以优化这个 SQL 语句?

sql语句中嵌套时候用in 和=有啥区别

怎样将数组作为sql中in的查询条件?