有沒有更好的方法來編寫這個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