Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Alex163
Member

Откуда:
Сообщений: 4
Доброго времени суток!
Связав две таблицы по полю Brand_ID, необходимо выводить значения TypeCars.Type, TypeCars.Brand_ID, TypeCars.Brand, чтобы Brand_ID не повторялось. Как это сделать проще и правильнее всего.

Cars

Brand_ID | Brand
------------+--------
Adf44 | AUDI
Kht23 | BMW
Jgr57 | MAZDA

TypeCars

Type | Brand_ID
------------+---------
Седан | Adf44
Универсал | Kht23
Кроссовер | Adf44
12 сен 19, 20:17    [21969856]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
Alex163,

а дубли куда девать?
12 сен 19, 20:36    [21969875]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Alex163
Member

Откуда:
Сообщений: 4
iap, Вот и я думаю куда ))
12 сен 19, 20:46    [21969884]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Alex163
iap, Вот и я думаю куда ))
Так это вопрос бизнес логики, как это может решить программист?
Задайте вопрос клиенту, "вот, есть 10 строк с одинаковым Brand_ID, какую из них вывести?"
12 сен 19, 22:14    [21969919]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Alex163
Member

Откуда:
Сообщений: 4
alexeyvg, Если есть дубль, то одну любую строку из этих дублей
13 сен 19, 07:28    [21969993]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
Alex163
необходимо выводить значения TypeCars.Type, TypeCars.Brand_ID, TypeCars.Brand

В таблице TypeCars нет поля Brand.

Alex163
Если есть дубль, то одну любую строку из этих дублей

ROW_NUMBER() по группе равных TypeCars.Brand_ID при какой-нибудь сортировке в CTE и вывод тех, у кого эта функция вернёт единицу.
Или
SELECT MIN(TypeCars.Type), TypeCars.Brand_ID, MIN(Cars.Brand)
FROM ...
GROUP BY  TypeCars.Brand_ID
13 сен 19, 08:05    [21970011]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Alex163
Member

Откуда:
Сообщений: 4
Akina, спасибо. Таким запросом я пробовал, в таблицах более 200 млн. строк, результат выполнения около 5 минут, из-за функций MIN(). Но по-другому видимо никак.
13 сен 19, 09:12    [21970057]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
Alex163
в таблицах более 200 млн. строк, результат выполнения около 5 минут

Тогда нумерация в CTE должна быть пошустрее. Особенно на TypeCars если есть хоть какой составной индекс с префиксом Brand_ID, на который можно сесть.
13 сен 19, 09:51    [21970103]     Ответить | Цитировать Сообщить модератору
 Re: Вывести значения нескольких полей, одно из которых должно быть уникальным  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Akina
Или
SELECT MIN(TypeCars.Type), TypeCars.Brand_ID, MIN(Cars.Brand)
FROM ...
GROUP BY  TypeCars.Brand_ID
Не, ну это не "любая строка", это значения разных полей, взятые из разных строк.

Лучше всего это решать, используя ROW_NUMBER()
13 сен 19, 19:01    [21970666]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить