一位客户要求我对 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/