代码之家  ›  专栏  ›  技术社区  ›  homam

在自己的桌子上

  •  2
  • homam  · 技术社区  · 14 年前

    有没有更好的方法来编写这个SQL查询?

    SELECT *,  (SELECT TOP 1 columnB FROM mytable WHERE mytable.columnC = T1.columnC ORDER BY columnD) as firstRecordOfColumnB
    FROM
        (SELECT * FROM mytable WHERE columnA = 'apple') as T1
    

    请注意,columnC不是主键。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Janick Bernet    14 年前

    如果keyColumns真的是一个键列(即unique),那么查询肯定可以写得更优雅、更高效。。。

    SELECT
      *, columnB
    FROM
      mytable
    WHERE
      columnA = 'apple'
    
        2
  •  0
  •   Peter Örneholm    14 年前

    在性能方面,这可能更好:

    SELECT
      *,
      (TOP 1 myLookupTable.columnB FROM mytable AS myLookupTable WHERE myLookupTable.keyColumn = mytable.keyColumn) as firstRecordOfColumnB
    FROM
      mytable
    WHERE
      columnA = 'apple'
    

    编辑: 如果keyColumn是唯一的,则firstRecordOfColumnB中的数据将与mytable.columnB中的数据相同。

    SELECT
      *,
      (TOP 1 myLookupTable.columnB FROM mytable AS myLookupTable WHERE myLookupTable.keyColumn = mytable.keyColumn
       ORDER BY myLookupTable.sortColumn) as firstRecordOfColumnB
    FROM
      mytable
    WHERE
      columnA = 'apple'