Возврат более одного значения из оператора SQL - PullRequest
2 голосов
/ 20 декабря 2008

Я смотрел на sql внутренние запросы (немного похоже на sql-эквивалент метода C # anon), и мне было интересно, можно ли вернуть более одного значения из запроса?

Например, вернуть количество строк в таблице как одно выходное значение, а также, как другое выходное значение, вернуть различное количество строк?

Кроме того, как работает отдельный? Основано ли это на том, может ли одно поле совпадать с другим (таким образом, классифицируется как «отличное»)?

Я использую Sql Server 2005. Будет ли снижение производительности, если я верну одно значение из одного запроса, а не два из одного запроса?

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 декабря 2008

Вы могли бы задать свой первый вопрос, выполнив следующее:

SELECT
  COUNT(field1),
  COUNT(DISTINCT field2)
FROM table

(Для первого поля вы можете сделать *, если необходимо подсчитать нулевые значения.)

Отличительный означает определение слова. Устраняет повторяющиеся возвращенные строки.

Возвращение 2 значений вместо 1 будет зависеть от того, какими были значения, были ли они проиндексированы или нет, а также от других неопределенных возможных переменных.

Если вы имеете в виду подзапросы в операторе выбора, вы не можете вернуть только 1 значение. Если вам нужно более 1 значения, вам нужно будет использовать подзапрос как объединение.

0 голосов
/ 20 декабря 2008

Вы можете вернуть несколько результатов тремя способами (с макушки головы)

  1. Имея select с несколькими значениями, например: select col1, col2, col3
  2. С несколькими запросами, например: выберите 1; выберите «2»; выберите колА. вы получите их в хранилище данных, вызвав .NextRecord ()
  3. Используя выходные параметры, объявите параметры перед выполнением запроса, а затем получите значение из них. Например: set @ param1 = "2". строка myparam2 = sqlcommand.parameters ["param1"]. tostring ()

Distinct, фильтрует результирующие строки как уникальные.

0 голосов
/ 20 декабря 2008

Внутренние запросы в форме:

SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2) 

не может возвращать несколько строк. Когда вам нужно несколько строк из вторичного запроса, вам обычно нужно выполнить внутреннее соединение с другим запросом.

строк:

SELECT count(*), count(distinct *) from table 

вернет набор данных с одной строкой, содержащей два столбца. Столбец 1 - это общее количество строк в таблице. В столбце 2 учитываются только отдельные строки.

Distinct означает, что возвращенный набор данных не будет содержать повторяющихся строк . Отличительный может появиться только один раз, обычно сразу после выбора. Таким образом, запрос, такой как:

SELECT distinct a, b, c FROM table 

может иметь такой результат:

 a1  b1  c1
 a1  b1  c2
 a1  b2  c2
 a1  b3  c2

Обратите внимание, что значения дублируются во всем наборе результатов, но каждая строка уникальна.

Я не уверен, что означает ваш последний вопрос. Вы должны вернуть из запроса все данные, относящиеся к запросу. Что касается ускорения, только сравнительный анализ может сказать вам, какой подход быстрее.

0 голосов
/ 20 декабря 2008

Если внутренний запрос встроен в SELECT, вы можете выбрать несколько значений. Однако часто вместо этого можно JOIN подзапрос; таким образом, подзапрос может быть назван, и вы можете получить несколько результатов

SELECT a.Foo, a.Bar, x.[Count], x.[Avg]
FROM a
INNER JOIN (SELECT COUNT(1) AS [Count], AVG(something) AS [Avg]) x
  ON x.Something = a.Something

Что может помочь.

DISTINCT делает то, что говорит. IIRC, вы можете SELECT COUNT(DISTINCT Foo) и т. Д. Для запроса отдельных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...