Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / left join / 12 сообщений из 12, страница 1 из 1
19.08.2004, 15:48:27
    #32657196
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Есть таблица 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
19.08.2004, 16:04:20
    #32657245
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Лучше соорудить ХП!

Best regards,
Dnico.
...
Рейтинг: 0 / 0
19.08.2004, 16:16:21
    #32657280
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Извини, я плохо знаю SQL.
Что такое ХП?
...
Рейтинг: 0 / 0
19.08.2004, 16:22:06
    #32657298
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Кстати, если убрать из запроса WHERE top_80.idtovar IS NULL выдает похожую на правду табличку. Но мне нужно выбрать только те значения, где выполняется условие IS NULL :(
...
Рейтинг: 0 / 0
19.08.2004, 17:02:17
    #32657423
AndriyKo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
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
19.08.2004, 17:51:10
    #32657558
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Нет. Этот запрос отрабатывает некорректно. Допустим есть товар, который продавался и клиентам из таблицы client_80, и всем остальным клиентам тоже продавался. Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.
...
Рейтинг: 0 / 0
19.08.2004, 18:10:06
    #32657597
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Igor SkvortsovНет. Этот запрос отрабатывает некорректно. Допустим есть товар, который продавался и клиентам из таблицы client_80, и всем остальным клиентам тоже продавался. Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.Ничччё не понимаю...
Туплю?
...
Рейтинг: 0 / 0
19.08.2004, 18:18:09
    #32657615
AndriyKo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
автор Данный товар будет присутствовать в результате этого запроса , а по условию задачи не должен.

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

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

Попробуй так

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
20.08.2004, 10:00:37
    #32658170
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
Версия сервера какая? Помню баг на эту тему...
Firebird 1.0.2
Коннекчусь через DBI 1.37 :: DBD 0.41
...
Рейтинг: 0 / 0
20.08.2004, 10:41:50
    #32658285
ASU
ASU
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
left join
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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / left join / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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