自己加入一张桌子

时间:2010-07-05 12:01:27

标签: sql join

有没有更好的方法来编写这个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 个答案:

答案 0 :(得分:2)

如果keyColumns确实是一个关键列(即唯一的),那么查询可以更明确,更有效地编写...

SELECT
  *, columnB
FROM
  mytable
WHERE
  columnA = 'apple'

答案 1 :(得分:0)

在性能方面可能会更好:

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

但对于TOP 1部分,我不知道任何更好的解决方案。

修改 如果keyColumn是唯一的,则firstRecordOfColumnB中的数据将与mytable.columnB中的数据相同。 如果它不是唯一的,至少你需要对数据进行排序以得到相关的TOP 1,例如:

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'