Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
basil-77 Member Откуда: Москва Сообщений: 584 |
Имеем таблицу 1
таблицу 2:
В результате надо получить:
т.е. набор записей, имеющийся в таблице 1 и совпадающий с таким-же набором в таблице 2 (Т1.Поле1 = Т2.Поле1 для всех записей в Т2) свести к одной записи, взяв по одному полю из каждой таблицы. Что-то никак не соображу как... ? |
|||||||||||||||||||||||||||
19 фев 16, 16:27 [18842089] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И что будет, если таких наборов будет несколько ? Да еще перекрывающихся ? |
19 фев 16, 16:35 [18842141] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Например таблицу 2:
|
|||||||||||||||
19 фев 16, 16:36 [18842147] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
SELECT DISTINCT COALESCE(t2.Field_2, t1.Field_1), t1.Field_2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.Field_1=t2.Field_1 ? |
19 фев 16, 16:42 [18842183] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Glory, исключено. Для каждого набора в таблице 2 второе поле будет содержать строго одно значение (на самом деле оно вообще будет лежать в другой таблице, в Т2 просто будет приджойнена по ключу) |
19 фев 16, 16:54 [18842270] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Glory, спасибо, очень похоже на то, что надо... Пойду покурю
COALESCE
|
19 фев 16, 17:05 [18842326] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Нет, не то... При добавлении записей в таблицу 2, например таблица 2:
В результате получаем тоже самое:
а должно быть в этом случае
т.к. таблица 1 уже не содержит полного набора, который есть в т2 |
|||||||||||||||||||||||||||||||||
19 фев 16, 17:15 [18842379] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Ошибся.. вот так т2:
|
|||||||||||||
19 фев 16, 17:17 [18842389] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
basil-77, до тех пор, пока Вы не соберёте мозги в кучку и не сформулируете ЗАДАЧУ, никто Вам не поможет. Телепатов не существует. А всё то, что Вы писали выше - это жалкие ошмётки задачи. То есть непригодная к работе фигня. |
19 фев 16, 18:01 [18842661] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Попробую сформулировать иначе: Есть две таблицы. Первая содержит два поля и множество записей (поле 2 - одно значение для всех записей). Вторая содержит тоже два поля и некий набор записей (поле 2 - одно для всех записей). Необходимо: если множество записей из второй таблицы (по первому полю) полностью содержится во множестве записей первой таблицы (по первому полю), т.е. для всех из Т2 выполняется Т2.Поле1 = Т1.Поле1 (но в Т1 это могут быть как все записи, так и их часть) то сформировать результат - одна строка: Поле1 = Т2.Поле2, Поле2 = Т1.Поле1. Если в Т1 остались строки, не вошедшие в множество из Т2, то они также включаются в результат без изменений. |
20 фев 16, 09:23 [18844340] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
|
||||||||
20 фев 16, 09:29 [18844357] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Да По второй таблице: поле 1 уникально, поле 2 - не уникально, но имеет одно значение для всех записей. Пара (п1, п2) соответственно тоже уникальна.
Нет. Сравнение только по полю1.
Такого не должно быть. "Замена" производится только при условии, что Т2.Поле1 полностью(!) содержится в Т1.Поле1. Если оказывается, что только часть Т2 совпадает с Т1 - то никаких действий не производим и результат, по сути, будет равен исходной Т1. А вот если в Т1 остались строки, не вошедшие в Т2 - то они прибавляются к результату. Иными словами - задача в том, чтобы множество записей из Т1 "смэппить" в одну по шаблону из Т2. |
||||||
20 фев 16, 09:41 [18844389] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
Это определяется наложенным на таблицу CONSTRAINT?
Это определяется наложенным на таблицу CONSTRAINT? PS. Всё, что не ограничено соответствующими правилами контроля - ничем не подтверждённая ерунда. Достаточно одного недоадмина-идиота. |
||||
20 фев 16, 10:13 [18844514] Ответить | Цитировать Сообщить модератору |
basil-77 Member Откуда: Москва Сообщений: 584 |
Akina, Это подтверждается бизнес-логикой. Иначе просто быть не может. (там поля - Первое - UserTeam, второе - User). Выборка осуществляется для каждого пользователя в отдельности. |
20 фев 16, 10:19 [18844537] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
Итого, имеемcreate table table1(field1, field2, index(field1,field2) unique) create table table2(field1, field2, index(field1) unique) плюс некие внешние силы гарантируют, что (select count(distinct field2) from table2) = 1 В этих условиях я лично не вижу возможности реализовать всё это одним запросом - вернее, это, наверное, получится, но уж больно многоэтажное выйдет безобразие. Я бы предложил проверку на полное вхождение и два разных запроса в рамках ХП в зависимости от результата проверки. |
20 фев 16, 10:59 [18844780] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |