|
|
|
| Привет всем.
у меня такая ситуация, есть следующий результат после джоинов таблиц
f1 | f2 | f3
---------------
1 | 1 | 1
2 | null | 2
3 | 3 | null
4 | null | null
|
мне нужно получить результат как
1 | 1 | 1
2 | null | 2
3 | 3 | null
|
но приэтом не использовать OR в условии (типо where f2 IS NOT NULL OR f3 IS not NULL).
За любые соображения буду благодарна | |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 13:24)
| | Хм... а можно взглянуть на объединение? И каким таблицам принадлежат столбцы f2 и f3? | |
|
|
|
|
|
|
|
для: cheops
(16.09.2009 в 13:27)
| | есть две таблицы
products
------------
product_id
|
и
prices
--------
product_id
price_id
price
|
во второй таблице хранится ай-ди прайслиста и сама цена (ну, понятно, что структура таблиц приведена для упрощения)
запрос примерно следующий
select count(p.id)
from products p
left join prices pl1 on (p.product_id=pl1.product_id AND pl1.price > 1 ...)
left join prices pl2 on (p.product_id=pl2.product_id AND pl2.price > 1 ...)
where (вот здесь нужен какое-то условие, чтоб отсечь продукты у которых цена не подходит не из одного прайс-листа, т.е где оба они is null)
GROUP BY p.id
|
т.е. мне нужно кол-во продуктов, цена которых меня удовлетворяет хотя бы в одном из прайс-листов. | |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 13:37)
| | Хм... а если просто отказаться от LEFT JOIN, заменив его на обычный JOIN - зачем вам продукты без соответствия в таблице prices? А лишние NULL это уберет. | |
|
|
|
|
|
|
|
для: cheops
(16.09.2009 в 13:50)
| | так если после первого джоина не будет резутьтатов, то мне уже несчем будет второй джоин делать. Т.е в результате я получу 0, даже если в pl2 были результаты
например, как из первого поста после лефт джоинов у меня был бы такой результат (пусть пока без каунта, а просто записи)
f1 | f2 | f3
---------------
1 | 1 | 1
2 | null | 2
3 | 3 | null
4 | null | null
|
то после иннер джоинов
f1 | f2 | f3
---------------
1 | 1 | 1
3 | 3 | null
|
верней, даже
f1 | f2 | f3
---------------
1 | 1 | 1
|
а мне нужно
f1 | f2 | f3
---------------
1 | 1 | 1
2 | null | 2
3 | 3 | null
|
| |
|
|
|
|
|
|
|
для: cheops
(16.09.2009 в 13:50)
| | И останутся только продукты , фигурирующие лишь в обоих срезах прайса сразу.
Здесь скорее подойдет
SELECT COUNT(id)
FROM ...
WHERE id IN(
SELECT product_id
FROM prices
WHERE ...
)
|
| |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 13:37)
| | А почему таблица prices используется два раза, причем формирование каждый раз идет одинаково? Что кроется в троеточиях? | |
|
|
|
|
|
|
|
для: cheops
(16.09.2009 в 14:26)
| | ну, там другие поля учитываются, типо price_id и т.п | |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 14:31)
| | речь как раз о том, что для подсчета общего количества их не стоит учитывать независимыми. | |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 13:24)
| | А почему OR невозможно испльзовать? Из-за AND? Если да, то условия с OR можно взять в скобки. | |
|
|
|
|
|
|
|
для: cheops
(16.09.2009 в 13:29)
| | очень замедляет запрос | |
|
|
|
|
|
|
|
для: LO
(16.09.2009 в 13:38)
| | Я думаю, что все-таки лучший вариант с OR как и было изначально. Но вот только надо поработать качественно с индексами.
Это конечно ускорит, но не намного ( вобщем буду пробовать, ковырять
Всем спасибо за советы | |
|
|
|