Присоединяясь к столу на себя - PullRequest
2 голосов
/ 05 июля 2010

Есть ли лучший способ написать этот 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 ]

2 голосов
/ 05 июля 2010

Если keyColumns действительно является ключевым столбцом (то есть уникальным), то запрос может быть определенно написан более элегантно и эффективно ...

SELECT
  *, columnB
FROM
  mytable
WHERE
  columnA = 'apple'
0 голосов
/ 05 июля 2010

Это может быть лучше в случае производительности:

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

Но для первой части я не знаю лучшего решения.

Edit: Если 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...