用连接替换嵌套where条件

时间:2017-02-13 14:48:12

标签: sql-server

我有一个看起来像这样的SQL查询

Select a.* 
From table1 a
where a.ColumnName in
    (Select MAX(b.ColumnName)
    from table2 b
    where b.ColumnName2 in
        (
        Select MAX(c.columnName)
        from table3 c
        Group by c.ColumnName2
        )
    Group by b.ColumnName2
    )

我试图在连接语句中写这个。我是积极的内在联接是我需要获得正确的信息。如果有人可以将其翻译为加入声明,我会非常高兴。

谢谢。

编辑1: 我尝试了一个菜鸟的典型加入声明。

Select a.* 
from table1 a
inner join table2 b
on a.columnname = (Select max(b.columnName) from table2)
inner join table3 c
on b.columnName = (select max(c.columnName) from table3)

显然,这不起作用,因为当我得到800时,我得到100,000以上的结果。我尝试使用table2和table3的别名INSIDE subselect语句并使用THAT别名选择列名:

Select max(bPart.columnName from table2 bPart)
Select max(cPart.columnName from table3 cPart)

结果仍然相同。

1 个答案:

答案 0 :(得分:1)

... PERHAPS

虽然我不确定为什么需要加入。性能明智存在可能是最快的,因为你没有从表2或3返回值,看起来这似乎是最好的方法。

SELECT a.* 
FROM table1 a
INNER JOIN (SELECT MAX(ColumnName) MColumnName, columnname2
            FROM table2
            GROUP BY columnName2) B
  ON A.columnName = B.mColumnName
INNER JOIN (SELECT MAX(columnName) mColumnName
            FROM table3
            GROUP BY ColumnName2) C
  ON B.columname2 = C.MColumnName