Sql Server查询语法

Dav*_*art 0 mysql sql sql-server-2005

我需要执行这样的查询:

SELECT *, 
    (SELECT Table1.Column 
     FROM Table1 
     INNER JOIN Table2 ON Table1.Table2Id = Table2.Id 
    ) as tmp 
FROM Table2 WHERE tmp = 1
Run Code Online (Sandbox Code Playgroud)

我知道我可以采取一种解决方法,但我想知道这种语法是否可行,因为它(我认为)在Mysql中.

Joe*_*orn 8

您发布的查询将无法在sql server上运行,因为select子句中的子查询可能会返回多行.我不知道MySQL会如何对待它,但是从我正在阅读的内容中,如果子查询返回任何重复项,MySQL也会产生错误.我知道SQL Server甚至不会编译它.

不同之处在于MySQL至少会尝试运行查询,如果你非常幸运(Table2Id在Table1中是唯一的)它将会成功.更可能的是会返回错误.SQL Server根本不会尝试运行它.

这是一个应该在任一系统上运行的查询,如果表1中的Table2Id不唯一,则不会导致错误.它返回在这种情况下,当唯一的区别是Table1.Column价值的源泉"重复"行:

SELECT  Table2.*, Table1.Column AS tmp
FROM Table1 
INNER JOIN Table2 ON Table1.Table2Id = Table2.Id
WHERE Table1.Column = 1
Run Code Online (Sandbox Code Playgroud)

也许如果你分享了你想要实现的目标,我们可以帮助你编写一个查询来完成它.