Re: [BUGS] Urgent - SQL left join bug?

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: [BUGS] Urgent - SQL left join bug?
Дата
Msg-id 55f7dcea-cd54-7f4c-e2e2-efc0e5e1cdfa@iki.fi
обсуждение исходный текст
Ответ на [BUGS] Urgent - SQL left join bug?  (Kaijiang Chen <chenkaijiang@gmail.com>)
Список pgsql-bugs
On 06/21/2017 11:06 AM, Kaijiang Chen wrote:
> I ran a SQL:
> select pha.id,ph.herb_id,pha.name,ph.weight
> from prescription_herbs as ph *left join* pharmacy_herbs as pha on
> ph.herb_id=pha.herb_id
> where ph.prescription_id=116285 and ph.deleted_at is null and
> pha.deleted_at is null and pha.pharmacy_id=22 order by ph.herb_id;
>
> Expected:
>
> It should have 10 rows because the SQL "select * from prescription_herbs as
> ph where ph.prescription_id=116285 and ph.deleted_at is null" returned 10
> rows and I'm using *LEFT JOIN *in the above SQL.
>
> Actual Result:
>
> It returned only 9 rows and the result is the same as JOIN (not LEFT JOIN).

Note that you have the condition "pha.pharmacy_id=22" in the WHERE part 
of the query. That filters out rows with no matching pharmacy_herbs 
rows, because pha.pharmacy_id is NULL for non-matching rows.

Put the "pha.pharmacy_id=22" condition in the ON join qual part instead. 
And for readability and consistency, I'd suggest putting the 
"pha.deleted_at is null" qual in the ON clause too, although that won't 
affect the result:

select pha.id,ph.herb_id,pha.name,ph.weight
from prescription_herbs as ph
left join pharmacy_herbs as pha on ph.herb_id=pha.herb_id and 
pha.deleted_at is null and pha.pharmacy_id=22
where ph.prescription_id=116285 and ph.deleted_at is null
order by ph.herb_id;

- Heikki



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Kaijiang Chen
Дата:
Сообщение: [BUGS] Urgent - SQL left join bug?
Следующее
От: Pantelis Theodosiou
Дата:
Сообщение: Re: [BUGS] Urgent - SQL left join bug?