Michał Płonka

Michał Płonka Programista PHP

Temat: Mniej warunków w WHERE i pusty zbiór wynikowy.

Witam,
mam pewien problem, z którym nie potrafię sobie poradzić. Mam takie zapytanie SQL:

SELECT CAST(biddings.bought_at AS DATE) AS date, MIN(auctions.start_price) AS min_start_price, AVG(auctions.start_price) AS avg_start_price, MAX(auctions.start_price) AS max_start_price, MIN(biddings.price) AS min_price, AVG(biddings.price) AS avg_price, MAX(biddings.price) AS max_price
FROM biddings
JOIN "auctions" ON ("biddings"."auction_id" = "auctions"."id")
JOIN "auctions_categories" ON ("auctions_categories"."auction_id" = "auctions"."id")
WHERE "biddings"."bought_at" >= '2010-12-01 00:00:00'
AND "biddings"."bought_at" <= '2011-02-16 23:59:59'
AND title_keywords @@ to_tsquery('public.polish', 'pancerka')
AND "auctions"."is_new" = 'f'
AND "auctions_categories"."category_id" = 19758
GROUP BY "date"
ORDER BY "date" ASC

Powyższe zapytanie zwraca mi dane, wszystko OK. Jest tam warunek:
AND "auctions"."is_new" = 'f'

który ogranicza dane tylko do tych oznaczonych jako używane.

Teraz w czym problem: jeśli usunę ten warunek, przez co zapytanie będzie postaci:

SELECT CAST(biddings.bought_at AS DATE) AS date, MIN(auctions.start_price) AS min_start_price, AVG(auctions.start_price) AS avg_start_price, MAX(auctions.start_price) AS max_start_price, MIN(biddings.price) AS min_price, AVG(biddings.price) AS avg_price, MAX(biddings.price) AS max_price
FROM biddings
JOIN "auctions" ON ("biddings"."auction_id" = "auctions"."id")
JOIN "auctions_categories" ON ("auctions_categories"."auction_id" = "auctions"."id")
WHERE "biddings"."bought_at" >= '2010-12-01 00:00:00'
AND "biddings"."bought_at" <= '2011-02-16 23:59:59'
AND title_keywords @@ to_tsquery('public.polish', 'pancerka')
AND "auctions_categories"."category_id" = 19758
GROUP BY "date"
ORDER BY "date" ASC

to w wyniku otrzymuję... pusty zbiór wynikowy. Jak na mój rozum, to powinienem otrzymać co najmniej to samo co przy pierwszym zapytaniu (dokładnie to samo, jeśli wszystkie dane byłyby z flagą is_new = 'f').

Spotkaliście się z czymś takim? Gdzie szukać problemu?

Pozdrawiam,
Michał

PS: PostgreSQL w wersji 8.3.13.Michał Płonka edytował(a) ten post dnia 26.02.11 o godzinie 09:12

konto usunięte

Temat: Mniej warunków w WHERE i pusty zbiór wynikowy.

Może dlatego że zwykły JOIN w postgresql to INNER JOIN? Spróbuj zmienić zapytanie na LEFT JOIN (LEFT OUTER JOIN).
Krzysztof Raczkowski

Krzysztof Raczkowski Stała współpraca,
Logifact-Systems Sp.
z o.o.

Temat: Mniej warunków w WHERE i pusty zbiór wynikowy.

Kurcze wydaje się to nieprawdopodobne ... coś tam jeszcze w tej bazie musi być :) Ostatecznie można przebudować indeksy .... bo jestem sobie w stanie wyobrazić, że skopany indeks może wpływać na wynik zapytania właśnie w ten sposób (raz go używa a raz nie).

Jak zrobisz taką strukturę na boku jak masz (3 tabelki ...) to będziesz miał powtarzalny wynik ?



Wyślij zaproszenie do