Как сформулировать цикл FOR EACH в SQL? - PullRequest
1 голос
/ 13 мая 2011

Я разрабатываю запрос SQL, который в настоящее время работает для одной комбинации «группа / режим». Но я хочу, чтобы этот запрос работал для всех групп и режимов. И включайте каждую комбинацию только один раз. Но в исходных данных есть много других столбцов, поэтому в каждой комбинации может быть несколько записей.

Итак, моя структура исходной таблицы:

group   mode   p-val
-----   ----   ------
A       B      4.567
C       D      3.694

Как я могу настроить петлю для просмотра каждой комбинации группы / режима? И я бы предпочел не использовать курсоры!

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Очень широкий и общий вопрос.Вот широкий и общий ответ.

Сначала напишите запрос, чтобы извлечь набор значений, которые вас интересуют, так, чтобы каждый набор был уникальным.SELECT DISTINCT... и SELECT... GROUP BY... предлагают себя.

Эти данные могут быть сохранены как временная таблица, включены как подзапрос или просто включены в общий итоговый запрос.Лучшее использование полностью зависит от того, над чем вы работаете.

Далее напишите свой «основной» запрос обработки, используя это подмножество в качестве основы.Что-то вроде ...FROM <theSubset> INNER JOIN <etc>.

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

2 голосов
/ 13 мая 2011

Это называется JOIN в sql.т. е. оператор

SELECT * FROM table AS a JOIN table AS b;

результаты

a | b | 4.5   | a | b | 4.5
a | b | 4.5   | c | d | 3.694
c | d | 3.694 | a | b | 4.5
c | d | 3.694 | c | d | 3.694

теперь у вас есть все комбинации записей [группа, режим].Узнайте больше о JOINs от Google.

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