2011-11-19 85 views
0

客户端请求我在SQL查询中执行一些更改并发送给我完全他想要的查询。他通常在msSql上工作,但表示它也可以在我使用的平台MySql上工作。不清楚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 

我不知道在哪里插入从选择获取正确的价值观和加入,以及它是如何知道在哪里输入的参数值。这个查询中发生了什么?没有任何值和任何值有更多的选择值,然后在插入目标...

此查询看起来是否合乎逻辑?

回答

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) 
+0

感谢伟大的explination的等价物,所以,我有两个问题,如果我可以部分返回的每一行:1在select查询中, [匹配]被认为是一个列名,但它是实际的盟友一个变量传递给函数。这是合乎逻辑的?和2 - 这个查询可以将多行插入到消息中? Thanks1 – Yanipan

+0

@Yanipan 1 - 这可以是合理的,例如,从一个Match复制行到另一个... 2 - 从技术上讲,这是可能的...取决于您的数据模型。 – Yahia