Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 September 28

ДК

Дмитрий Калинов... in SqlCom.ru - Стиль жизни SQL
для начала
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
и по этому условие NOT EXIST всегда фолс
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Андрей
SELECT Number
FROM Shop WHERE Number in (6284,5129,5142,5249,5336,5394,5530,5608,5792,5889,5960,6137,6161,5112,5137,6426,5189,5571,5678,6027,6134,6190,6283,6303)
AND
NOT EXISTS
(SELECT ShopID
FROM Questionaries
WHERE  Date BETWEEN '2020-09-01' and '2020-09-28'
)
делай через джойн
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Андрей
SELECT Number
FROM Shop WHERE Number in (6284,5129,5142,5249,5336,5394,5530,5608,5792,5889,5960,6137,6161,5112,5137,6426,5189,5571,5678,6027,6134,6190,6283,6303)
AND
NOT EXISTS
(SELECT ShopID
FROM Questionaries
WHERE  Date BETWEEN '2020-09-01' and '2020-09-28'
)
где связь Shop и Questionaries в exists? ее Пушкин писать будет? :)
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
или в подзапрос добавь корелирующее условие
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
типа and Questionaries.ShopId = Shop.Number
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Андрій
типа and Questionaries.ShopId = Shop.Number
я ему это выше писал, но у него свой лубочный sql видимо
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
вобще тут предлагали за ответы на вопросы уровня 9 класа банить
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Андрій
делай через джойн
скрипач join не нужен
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
2flower _
скрипач join не нужен
имхо читабельнее
источник

ДК

Дмитрий Калинов... in SqlCom.ru - Стиль жизни SQL
Андрій
имхо читабельнее
видимо, это дело вкуса, для меня not exists нагляднее будет, типа "дай мне все записи из таблицы X, для которых нет записей в таблице Y по вот таким условиям"
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Коллеги, правильно же, разницы по перформансу двух следующих запросов в принципе не должно быть вообще?
with cte as (
select * from dbo.table
)select * from cte


select * from dbo.table
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Дмитрий Калинов
видимо, это дело вкуса, для меня not exists нагляднее будет, типа "дай мне все записи из таблицы X, для которых нет записей в таблице Y по вот таким условиям"
ну корелирующие запросы труднее дебажить обычно.
в лефт джойне с иснулом нагляднее, просто исловие закоментил и посмотрел данные. но да, дело вкуса.
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Андрій
имхо читабельнее
вопрос в производительности, вам тогда distinct нужен будет, он вам надо?
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
2flower _
вопрос в производительности, вам тогда distinct нужен будет, он вам надо?
логично, согласен.
не учел.
источник

ДК

Дмитрий Калинов... in SqlCom.ru - Стиль жизни SQL
Андрій
Коллеги, правильно же, разницы по перформансу двух следующих запросов в принципе не должно быть вообще?
with cte as (
select * from dbo.table
)select * from cte


select * from dbo.table
по идее отличий быть не должно
источник

2_

2flower _ in SqlCom.ru - Стиль жизни SQL
Андрій
логично, согласен.
не учел.
exists-это прекрасно почти всего, все оптимизации работают, а left join первый шаг к выстрелу в ногу особенно если например внутри exists еще несколько таблиц коррелируют, отлаживать такое в Join'ом еще хуже
источник

А

Андрей in SqlCom.ru - Стиль жизни SQL
SELECT Number
FROM Shop  
WHERE Number in (6284,5129,5142,5249,5336,5394,5530,5608,5792,5889,5960,6137,6161,5112,5137,6426,5189,5571,5678,6027,6134,6190,6283,6303)
AND
NOT EXISTS
(SELECT ShopID
FROM Questionaries
WHERE  Date BETWEEN '2020-09-01' and '2020-09-28'
AND   Questionaries.ShopID = Shop.Number
)

Теперь получился нужный результат, спасибо
источник

ДК

Дмитрий Калинов... in SqlCom.ru - Стиль жизни SQL
Андрей
SELECT Number
FROM Shop  
WHERE Number in (6284,5129,5142,5249,5336,5394,5530,5608,5792,5889,5960,6137,6161,5112,5137,6426,5189,5571,5678,6027,6134,6190,6283,6303)
AND
NOT EXISTS
(SELECT ShopID
FROM Questionaries
WHERE  Date BETWEEN '2020-09-01' and '2020-09-28'
AND   Questionaries.ShopID = Shop.Number
)

Теперь получился нужный результат, спасибо
где тут стикер с фейспалмом? 😃
источник

ДК

Дмитрий Калинов... in SqlCom.ru - Стиль жизни SQL
в чатик за помощью приди, ответы не читай, свою уличную магию пиши - всё правильно сделал!
источник