|
Как работает LEFT JOIN?
|
|||
---|---|---|---|
#18+
Есть следующий запрос: SELECT n.id, n.n_date, n.topic, n.text, count(COALESCE(c.id,0)) as cnt from news as n LEFT JOIN comments AS c ON c.n_id=n.id GROUP BY id ORDER BY n_date desc, id desc LIMIT 10 В мануле MySQL написано: If there is no matching record for the right table in the ON or USING part in a LEFT JOIN, a row with all columns set to NULL is used for the right table. То есть если для строки из news не попадется ничего в comments, то cnt должны быть 0. Но почему-то так не происходит. Выбираются только записи из news, у которых есть соответсвующие строки в comments. :-\ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2004, 22:23 |
|
Как работает LEFT JOIN?
|
|||
---|---|---|---|
#18+
в ms sql есть такая конструкция left outer join - может подойдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 06:12 |
|
Как работает LEFT JOIN?
|
|||
---|---|---|---|
#18+
Нет, не подходит. Это все таки MySQL :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 09:50 |
|
Как работает LEFT JOIN?
|
|||
---|---|---|---|
#18+
1. left join - это и есть краткое наименование left outer join. 2. что будет, если убрать count, group by и coalesce? 3. cnt не должен быть 0. count считает и 0, и null, ничего не пропускает. надо наверно было сделать sum(if(isnull(c.id),0,1)) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 11:16 |
|
Как работает LEFT JOIN?
|
|||
---|---|---|---|
#18+
попробуй жместо ON c.n_id=n.id написать ON n.id=c.n_id или вместо LEFT JOIN написат RIGHT JOIN ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 14:12 |
|
|
start [/forum/topic.php?fid=47&tid=1855435]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 125ms |
0 / 0 |