Juan C Henao Ответов: 1

Получение различных строк из двух связанных таблиц. T-SQL


Имейте две связанные таблицы в соотношении один ко многим.
У меня есть оператор select, например
Select MasterTable.*, DetailTable.Field1
From MasterTable INNER JOIN DetailTable
WHERE Criteria

Он возвращает несколько строк для каждого поля мастер-ключа главной таблицы, даже если оно не включает поле Field1 в критерии.

Я хотел бы отфильтровать результаты таким образом, чтобы на каждое поле мастер-ключа в главной таблице возвращалась только одна строка.

Заранее спасибо

Что я уже пробовал:

Я пробовал выбирать разные
А также группировать по
но я, кажется, не попал в точку.

Wendelius

Если вы хотите только 1 строку для каждой строки в главной таблице, как различные значения в DetailTable.Поле 1 должно быть обработано?

1 Ответов

Рейтинг:
1

Dirk Bahle

Было бы лучше, если бы вы могли определить 2 таблицы с точки зрения их строк и критериев объединения - оператор create table для каждой из них был бы лучше всего, потому что в противном случае вам будет трудно помочь, так как вы не детализируете, что вы пробовали и что было сообщением об ошибке :-(

Вы правы, select distinct можно использовать для извлечения строк с различными (уникальными) значениями, но вы должны быть осторожны с теми строками, которые встречаются в обеих таблицах. Обязательно всегда указывайте таблицу, к которой вы благоговеете:

Select distinc m.Field1, d.Field2
From MasterTable m
    INNER JOIN DetailTable d
   on m.key = d.key
WHERE Criteria


Как насчет утверждения, подобного приведенному выше, где выбранное поле указывается с определенной таблицей m или d для Мастер и DetailTable- Это работает? Если нет, то каков конкретный дизайн таблицы, оператор запроса и сообщение об ошибке?

Что же касается самого group by это также полезно для выбора отдельных строк, но обычно используется только тогда, когда вы хотите подсчитать вещи, такие как дублирование строк или определение значений min() или max (). Типичное использование похоже на приведенное выше утверждение, но с group by clause и вы должны использовать дополнительную осторожность, чтобы выберите только те значения, которые также присутствуют в предложении group by (min() или max(), или sum()) могут быть выбраны без необходимости быть в предложении group by per se). Так как насчет такого заявления:

Select m.Field1, d.Field2, count(*)
From MasterTable m
    INNER JOIN DetailTable d
   on m.key = d.key
WHERE Criteria
 group by m.Field1, d.Field2


Это работает? Если нет, то каков конкретный дизайн таблицы, оператор запроса и сообщение об ошибке?