客户端要求我在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
我不确定插入从select和join中获取正确的值,以及它如何知道输入哪个值。这个查询中发生了什么?在任何地方都没有VALUES,然后在插入中有更多选定的值...
此查询是否符合逻辑?
答案 0 :(得分:4)
是的 - 这是一个绝对正常的查询......让我们分解一下:
第一部分
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)