有没有更好的方法来编写这个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不是主键。
有没有更好的方法来编写这个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不是主键。
如果KeyColumns内确实是一个键列(即唯一的),比查询可以definitly写更多优雅和有效地...
SELECT
*, columnB
FROM
mytable
WHERE
columnA = 'apple'
+1。我不得不制定一个例子来注意到... – 2010-07-05 12:25:08
columnB将成为*我猜的一部分?如果你不希望columnB到最后,你可以简单地写下:* – 2010-07-05 14:24:14
没有抱歉,把它命名为keyColumn是个错误。这不是主要关键。 – homam 2010-07-07 06:38:57
这可能是在性能的情况下更好地:
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'
thx。我不知道我可以像这样使用AS: SELECT ... FROM mytable AS myLookupTable ... 是的,我没有加入主键。但表已经排序。 – homam 2010-07-07 06:43:38
不客气。如果您认为它解决了您的问题,请将此标记为答案:) – 2010-07-07 21:50:21
您的加盟条件没有做任何有用的,因为它是在同一个表相同的字段,除非它是一个非唯一列,那么你基本上只是选择一个随机行返回。你确定这是你的意思吗? – Donnie 2010-07-05 12:05:32
这是我的错误,将其命名为keyColumn。 我有一个表与许多记录与列C相同的值。 我想返回一个特定的行加上第一条记录中的一些列,并使用与columnC相同的值。 – homam 2010-07-07 06:38:12
只要您未定义订单,就不会有'第一个'记录。获得“第一”记录背后的想法究竟是什么?它需要什么? – 2010-07-07 06:50:30