|
Выбор из главной и дочерей таблицы
|
|||
---|---|---|---|
#18+
Есть две таблицы. create table block ( id bigint, name char(10) ); create table subblock ( blockid bigint name char(10) ); Соответственно subblock.blockid ссылается на block.id Обе таблицы заполнены но не на каждый block есть subblock. И в block может быть более одного subblock. Цель: выбрать таблицу следующего вида block.id, number_of_subblocks где number_of_subblocks это количество subblocks ссылающихся на это block.id SELECT bl.id, count(*) as number_of_subblocks FROM block bl, subblock sb WHERE sb.blockid=bl.id GROUP BY sb.blockid Все-бы хорошо, но при таком запросе вообще нет ни одной записи по тем block в которых нет subblock а в этом случае надо выводить 0 (ноль). Пробовал с JOIN и запутался окончательно получались все варианты кроме нужного. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2002, 09:21 |
|
Выбор из главной и дочерей таблицы
|
|||
---|---|---|---|
#18+
Всем спасибо вроде разобрался! Получилось вот так. SELECT bl.id, SUM(CASE WHEN sb.id IS NULL THEN 0 ELSE 1 END) AS SB_COUNT, SUM(CASE WHEN dc.blockid IS NULL THEN 0 ELSE 1 END) AS MSG_COUNT FROM block AS bl LEFT JOIN block AS sb ON bl.id=sb.parentid LEFT JOIN docs AS dc ON bl.id=dc.blockid GROUP BY bl.id Самое странное не захотел работать NULLIF !? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2002, 10:34 |
|
|
start [/forum/topic.php?fid=47&tid=1856388]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 500ms |
0 / 0 |