|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Есть две таблицы Детали и Тестирование. Нужно вывести все детали, не проходящие тестирование в определённом году. Есть 2 особенности: 1. Есть детали которые вообще не проходят тестирование, их надо выводить тоже; 2. Есть детали которые проходят тестирование по много раз, и таких много. Связь 1 : М. Написал вот такой запрос: select distinct name from Detales dt left join Testing ts on ts.ID_Detail = dt.ID where ts.DateBegin not like '%2015%' Но из-за второй особенности выборка получается неверная, выводятся детали которые были протестированы. Переписал вот так : select name from Detales dt where dt.ID <> (select distinct ID_Detale from Testing ts where ts.DateBegin like '%2015%') Работает, но такой запрос слишком громоздкий. Как можно написать его используя один селект? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 10:40 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, Код: sql 1. 2. 3. 4.
При внешнем соединении таблицы все условия фильтрации по ней должны быть в кляузе ON. Если вы помещаете их в WHERE, ваш left join превращается в inner. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 10:51 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael Если вы помещаете их в WHERE, ваш left join превращается в inner. Главное, чтобы значения NULL сравнивались в WHERE только операторами IS NULL или IS NOT NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 11:12 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael, Не работает так к сожалению. С таким where выводятся только детали, не участвующие в тестировании. Это правильно, но еще надо выводить остальные детали, которые участвуют в тестировании, но не в конкретном году. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 11:25 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 11:42 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
aleks222, С некоторыми поправками (not exists на exists) этот запрос работает правильно. Но он практически такой же, как тот, который хочу упростить) У него тоже несколько селектов) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 11:58 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest aleks222, С некоторыми поправками (not exists на exists) этот запрос работает правильно. Но он практически такой же, как тот, который хочу упростить) У него тоже несколько селектов) Качество запроса измеряется не числом селектов в нем, а временем исполнения. Вольно вам заниматься фигней. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:02 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
aleks222, если деталей тысяч сто, а тестирований по миллиону в году, Ваш запрос будет чистый треш. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:03 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, пример данных дайте. Потому что запрос Ennor Tiegae верен только в случае верного предположения, в каком формате у Вас хранятся даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:04 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
ptr128, Даты храняться в varchar. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:09 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
aleks222, Это больше академическая задача чем практическая. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:10 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
aleks222 Качество запроса измеряется не числом селектов в нем, а временем исполнения. Во-первых, не временем исполнения, а временем загрузки CPU и IO. Обычно, лучше иметь запрос выполняющийся на 10-20% дольше на одном ядре, чем выполняющийся быстрее, но на 32-х ядрах. Во-вторых, конструкцию LIKE '%...' следет избегать всеми силами. Потому что, в лучшем случае, она подразумевает полное сканирование кластерного индекса, а в худшем - сканирование всей таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:10 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, точнее. Приведите примеры хотя бы нескольких строк данных каждой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:11 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Все, ответ нашел, проверил, работает https://ru.stackoverflow.com/questions/1229276/Связать-две-таблицы-joinом-при-связи-1М ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:12 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Спасибо всем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:14 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, это опять уход в Table Scan/Clustered Index Scan. Не стоит так делать. P.S. Нет вру. Если индекс по ID_Detail еще пройдет. Но при сравнении все равно лучше избегать функций со стороны присоединяемой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:14 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
ptr128, Да, согласен. Но в данном случае этот пример больше академический чем практический, нужно именно локаничный и понятный, минимальный запрос. Спасибо вам. Если есть варианты, лишними не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:19 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest еще надо выводить остальные детали, которые участвуют в тестировании, но не в конкретном году. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:20 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael, вот здесь результат можно посмотреть https://ru.stackoverflow.com/questions/1229276/Связать-две-таблицы-joinом-при-связи-1М ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:22 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael, судя по тому, как запрос по ссылке лихо преобразовал строку в дату, она там в ISO формате ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:24 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael, Да, я неправильно вам ответил, where у вас правильный был. Дело в соединении было. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:26 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, Вот и используйте запрос Ennor Tiegael. К нему у меня претензий по оптимальности нет. При правильных индексах, само собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:32 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
Ennor Tiegael, Извиняюсь. Сейчас проверил, ваш запрос верен, я сам его походу случайно в первый раз переделал. Сам виноват. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 12:36 |
|
Связать две таблицы join'ом при связи 1:М.
|
|||
---|---|---|---|
#18+
RonaldLRivest, А, окей. Бывает. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:32 |
|
|
start [/forum/topic.php?fid=46&msg=40034574&tid=1685210]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 611ms |
0 / 0 |