powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / left join
12 сообщений из 12, страница 1 из 1
left join
    #32657196
Igor Skvortsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица sales, в нее записываются все продажи: idsale - номер продажи(PRIMARY KEY), idcust - кому продали, idtovar - что продали
Есть таблица client_80 - список клиентов, продажи по которым укладываются в 80% от общих продаж. idcust - PRIMARY KEY
Мне нужно выкрутить такой отчет: выбрать все товары, которые никогда не продавались никому из таблицы client_80.
Пытаюсь написать так:
$sth = $dbh->do("CREATE VIEW ALL_ AS SELECT DISTINCT s.idtovar FROM sales s;");
$sth = $dbh->do("CREATE VIEW top_80 AS SELECT DISTINCT s.idtovar FROM sales s in
ner join client_80 c on s.idcust=c.idcust;");
$sth = $dbh->prepare("SELECT ALL_.idtovar FROM ALL_ left join top_80 on ALL_.idt
ovar=top_80.idtovar WHERE top_80.idtovar IS NULL;");
К сожалению, результат запроса аналогичен выполнению SELECT idtovar FROM ALL_
SELECT COUNT(idtovar) FROM ALL_ возвращает 940
SELECT COUNT(idtovar) FROM top_80 возвращает 644
Т.е., запрос с 'left join' должен возвращать около 300 значений, а никак не все 944.
Подскажите, что я делаю не так?
...
Рейтинг: 0 / 0
left join
    #32657245
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше соорудить ХП!

Best regards,
Dnico.
...
Рейтинг: 0 / 0
left join
    #32657280
Igor Skvortsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извини, я плохо знаю SQL.
Что такое ХП?
...
Рейтинг: 0 / 0
left join
    #32657298
Igor Skvortsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, если убрать из запроса WHERE top_80.idtovar IS NULL выдает похожую на правду табличку. Но мне нужно выбрать только те значения, где выполняется условие IS NULL :(
...
Рейтинг: 0 / 0
left join
    #32657423
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Skvortsov
Мне нужно выкрутить такой отчет: выбрать все товары, которые никогда не продавались никому из таблицы client_80.
Пытаюсь написать так:
$sth = $dbh->do("CREATE VIEW ALL_ AS SELECT DISTINCT s.idtovar FROM sales s;");
$sth = $dbh->do("CREATE VIEW top_80 AS SELECT DISTINCT s.idtovar FROM sales s in
ner join client_80 c on s.idcust=c.idcust;");
$sth = $dbh->prepare("SELECT ALL_.idtovar FROM ALL_ left join top_80 on ALL_.idt
ovar=top_80.idtovar WHERE top_80.idtovar IS NULL;");


Не совсем понял назначение VIEW. Имхо, задача решается одним запросом
Select Distinct s.idtovar From sales s left join client_80 c On s.idcust=c.idcust
Where c.idcust Is Null
...
Рейтинг: 0 / 0
left join
    #32657558
Igor Skvortsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. Этот запрос отрабатывает некорректно. Допустим есть товар, который продавался и клиентам из таблицы client_80, и всем остальным клиентам тоже продавался. Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.
...
Рейтинг: 0 / 0
left join
    #32657597
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor SkvortsovНет. Этот запрос отрабатывает некорректно. Допустим есть товар, который продавался и клиентам из таблицы client_80, и всем остальным клиентам тоже продавался. Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.Ничччё не понимаю...
Туплю?
...
Рейтинг: 0 / 0
left join
    #32657615
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.

Если МП и тупит, то не один... Час назад специально проверил работу запроса в IBE, работало. Уточни или повтори условие задачи.
...
Рейтинг: 0 / 0
left join
    #32657666
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor SkvortsovПодскажите, что я делаю не так?

Версия сервера какая? Помню баг на эту тему...
...
Рейтинг: 0 / 0
left join
    #32657677
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дошло :-)))

Попробуй так

Select distinct s.idtovar From sales s where
not exists (select c.idcust from client_80 c,sales s1 where c.idcust=s1.idcust)
...
Рейтинг: 0 / 0
left join
    #32658170
Igor Skvortsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия сервера какая? Помню баг на эту тему...
Firebird 1.0.2
Коннекчусь через DBI 1.37 :: DBD 0.41
...
Рейтинг: 0 / 0
left join
    #32658285
ASU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASU
Гость
Igor SkvortsovЕсть таблица sales, в нее записываются все продажи: idsale - номер продажи(PRIMARY KEY), idcust - кому продали, idtovar - что продали
Есть таблица client_80 - список клиентов, продажи по которым укладываются в 80% от общих продаж. idcust - PRIMARY KEY
Мне нужно выкрутить такой отчет: выбрать все товары, которые никогда не продавались никому из таблицы client_80
Поможет предикат NOT EXISTS:
Код: plaintext
SELECT S.IDSALE, S.IDCUST, S.IDTOVAR FROM SALES S WHERE NOT EXISTS (SELECT * FROM CLIENT_80 C80 WHERE C80.IDCUST = S.IDCUST)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / left join
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]