有没有更好的方法来编写这个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不是主键。
答案 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'