[Dbix-class] Problem with join

Moritz Onken onken at houseofdesign.de
Fri May 29 18:08:26 GMT 2009


Am 29.05.2009 um 19:04 schrieb Андрей Костенко:

> Not so easy. If DBMS can't find records in joined table, it returns  
> NULLs:
> test=# SELECT * FROM table1 LEFT JOIN table2 ON  
> table2.table1_id=table1.id AND table2.user_id=123;
>  id | table1_id | user_id
> ----+-----------+---------
>   1 |         1 |     123
>   2 |           |
>   3 |         3 |     123
>   4 |           |
>   5 |           |
> (5 rows)
>
> but your code will return only:
>
> test=# SELECT * FROM table1 LEFT JOIN table2 ON  
> table2.table1_id=table1.id WHERE table2.user_id=123;
>  id | table1_id | user_id
> ----+-----------+---------
>   1 |         1 |     123
>   3 |         3 |     123
> (2 rows)


does

> SELECT * FROM table1 LEFT JOIN table2 ON table2.table1_id=table1.id  
> WHERE table2.user_id=123 OR table2.user_id IS NULL;

fix this?

DBIC:

$rs->search(['table2.user_id' => 123, 'table2.user_id' => {'=' =>  
undef}], { prefetch => 'table2' });


More information about the DBIx-Class mailing list