mysql - 不清楚 mySql 查询语法

标签 mysql

一位客户要求我对 SQL 查询进行一些更改,并向我发送了他想要的查询。他通常在 msSql 上工作,但说它也应该在我正在使用的平台 MySql 上工作。

这是查询:

INSERT INTO     Messages (Match, Message)
SELECT          [Match], MM.Message
FROM            MatchMessages AS MM
INNER JOIN  Matches AS M
ON      MM.ActionBy=M.ActionBy
AND     MM.Status=M.Status

我不确定插入从选择和连接中获取正确值的位置,以及它如何知道在何处输入哪个值。此查询中发生了什么?任何地方都没有 VALUES 并且有更多选择的值然后在插入中定位...

这个查询看起来合乎逻辑吗?

最佳答案

是的 - 这是一个绝对正常的查询......让我们分解一下:

第一部分

SELECT          [Match], MM.Message
FROM            MatchMessages AS MM
INNER JOIN  Matches AS M
ON      MM.ActionBy=M.ActionBy
AND     MM.Status=M.Status

这将首先执行并返回 0-n 行数据......每行包含 2 列(匹配和消息),并按此特定顺序排列。如果您只想独立执行它(就像这里没有 INSERT 部分一样)。

第二部分

INSERT INTO     Messages (Match, Message)

这部分得到第一部分的结果(请注意,这部分不知道也不关心第一部分的列名,它只是按照列的顺序行事)...这意味着返回的每一行通过第一部分,它相当于

INSERT INTO Messages (Match, Message) VALUES (MatchFromPartOne, MessageFromPartOne)

关于mysql - 不清楚 mySql 查询语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193090/

相关文章:

php - 将 SQL 查询中的行数存储为变量

PHP - 回显缺少的条目

python - mysql一次插入多条记录

php - Laravel 4 从关系中收集数据

MySQL 连接语法未知列

mysql - 左外连接、WHERE 子句和 COALESCE

mysql 显示不同数量的数据库

php - 为什么稍后关闭查询 ")"?

java - 从mysql表中获取元素到arraylist

mysql - 如果我们对表的 View 进行任何更改,是否会更改实际的表数据?