2015-01-25 2 views
0

я написал SQL запрос для подсчета (на три таблицы) строки, относящиеся к Id:подсчета строк на несколько таблиц для каждого из множества идентификаторов

SELECT 
(SELECT `Id` FROM `Tab1` WHERE `Id` = '1') AS ID, 
(SELECT COUNT(*) FROM `tab1` WHERE `Id` = '1') AS RowsTab1, 
(SELECT COUNT(*) FROM `tab2` WHERE `Id` = '1') AS RowsTab2, 
(SELECT COUNT(*) FROM `tab3` WHERE `Id` = '1') AS RowsTab3 

Но мне это нужно на массив идентификаторов, так что результатом запроса является таблица, которая показывает для каждого идентификатора количество строк в каждой из трех таблиц.

Результат должен быть что-то вроде:

ID RowsTab1  RowsTab2  RowsTab3 
1  2   4   2 
2  3   0   8 
5  0   2   4 

и так далее

Есть ли способ сделать это только с одним запросом?

Я хочу уточнить, что запрос будет выполняться с помощью Excel - VBA

Заранее спасибо

+0

'(SELECT Id FROM Tab1 WHERE Id = '1') AS ID' Это всегда 1 (предполагается, что существует Идентификатор 1), кажется бесполезным. – Devon

+0

Я упростил запрос, используя имена, простейшие, чем реальные для полей и таблиц. Мне нужно, чтобы иметь ссылку на счет (ы) – genespos

+0

Да, но вы выбираете только Id, где Id = 1. Это довольно бессмысленный запрос. Это почти эквивалентно 'select 1' – Devon

ответ

0

Если я правильно понял, это должно решить вашу проблему:

SELECT Tab0.id, 
(SELECT COUNT(*) FROM `tab1` WHERE `Id` = Tab0.Id) AS RowsTab1, 
(SELECT COUNT(*) FROM `tab2` WHERE `Id` = Tab0.Id) AS RowsTab2, 
(SELECT COUNT(*) FROM `tab3` WHERE `Id` = Tab0.Id) AS RowsTab3 
FROM Tab0 WHERE field1 = 'myvalue' 
+0

Вместо« Tab1 как источник »я попытался вставить запрос:' (SELECT id FROM Tab0 WHERE field1 = 'myvalue') в качестве источника' Я также попытался создать временную таблицу, но я не знаю правильного синтаксис. Итак, у меня остались только ошибки. Можете ли вы предложить мне правильный синтаксис? – genespos

+0

Я обновил ответ, решает ли ваша проблема? –

+0

спасибо, он работает. Теперь мне нужно только проверить, что результат - это то, что мне нужно. – genespos

1

Вы можете получить отсчеты вы хотите с помощью связанных подзапросов. Затем вам нужен источник для ids, который вы можете поместить в подзапрос. Что-то вроде этого:

select ids.id, 
     (select count(*) from tabl where tabl1.id = ids.id) as tab1_cnt, 
     (select count(*) from tab2 where tabl2.id = ids.id) as tab2_cnt, 
     (select count(*) from tab3 where tabl3.id = ids.id) as tab3_cnt 
from (select 1 as id union all select 2 union all select 5) as ids 

Если идентификаторы, о которых вы заботитесь, уже находятся в таблице, то вы можете просто использовать эту таблицу.

+0

Идентификаторы, которые мне нужны, находятся в массиве – genespos

+0

@genespos. , , Вы можете использовать массив для генерации кода SQL в предложении 'from'. –

+0

Я так думаю, но я не знаю, как это сделать .. любые предлагают? – genespos

Смежные вопросы