Risposte:
SELECT (
SELECT COUNT(*)
FROM tab1
) AS count1,
(
SELECT COUNT(*)
FROM tab2
) AS count2
FROM dual
FROM dual
.
Per ulteriori informazioni, per ottenere lo stesso risultato in SQL Server, è sufficiente rimuovere la parte "DA doppia" della query.
Solo perché è leggermente diverso:
SELECT 'table_1' AS table_name, COUNT(*) FROM table_1
UNION
SELECT 'table_2' AS table_name, COUNT(*) FROM table_2
UNION
SELECT 'table_3' AS table_name, COUNT(*) FROM table_3
Fornisce le risposte trasposte (una riga per tabella anziché una colonna), altrimenti non penso che sia molto diverso. Penso che dal punto di vista delle prestazioni dovrebbero essere equivalenti.
Altri metodi leggermente diversi:
with t1_count as (select count(*) c1 from t1),
t2_count as (select count(*) c2 from t2)
select c1,
c2
from t1_count,
t2_count
/
select c1,
c2
from (select count(*) c1 from t1) t1_count,
(select count(*) c2 from t2) t2_count
/
Come non vedo nessun'altra risposta, solleva questo.
Se non ti piacciono le sottoquery e hai le chiavi primarie in ogni tabella puoi farlo:
select count(distinct tab1.id) as count_t1,
count(distinct tab2.id) as count_t2
from tab1, tab2
Ma per quanto riguarda le prestazioni, credo che la soluzione di Quassnoi sia migliore e quella che userei.
Ecco da me condividere
Opzione 1: conteggio dallo stesso dominio da una tabella diversa
select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain1.table2) "count2"
from domain1.table1, domain1.table2;
Opzione 2: conteggio da un dominio diverso per la stessa tabella
select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain2.table1) "count2"
from domain1.table1, domain2.table1;
Opzione 3: conteggio da un dominio diverso per la stessa tabella con "unione tutto" per avere righe di conteggio
select 'domain 1'"domain", count(*)
from domain1.table1
union all
select 'domain 2', count(*)
from domain2.table1;
Goditi l'SQL, lo faccio sempre :)
select
t1.Count_1,t2.Count_2
from
(SELECT count(1) as Count_1 FROM tab1) as t1,
(SELECT count(1) as Count_2 FROM tab2) as t2
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
Per un po 'di completezza, questa query creerà una query per fornire un conteggio di tutte le tabelle per un determinato proprietario.
select
DECODE(rownum, 1, '', ' UNION ALL ') ||
'SELECT ''' || table_name || ''' AS TABLE_NAME, COUNT(*) ' ||
' FROM ' || table_name as query_string
from all_tables
where owner = :owner;
L'output è qualcosa di simile
SELECT 'TAB1' AS TABLE_NAME, COUNT(*) FROM TAB1
UNION ALL SELECT 'TAB2' AS TABLE_NAME, COUNT(*) FROM TAB2
UNION ALL SELECT 'TAB3' AS TABLE_NAME, COUNT(*) FROM TAB3
UNION ALL SELECT 'TAB4' AS TABLE_NAME, COUNT(*) FROM TAB4
Che puoi quindi eseguire per ottenere i tuoi conteggi. A volte è solo uno script utile da avere.
Se le tabelle (o almeno una colonna chiave) sono dello stesso tipo, crea prima l'unione e poi conta.
select count(*)
from (select tab1key as key from schema.tab1
union all
select tab2key as key from schema.tab2
)
Oppure prendi la tua sazietà e metti un'altra somma () attorno ad essa.
select sum(amount) from
(
select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2
)
--============= FIRST WAY (Shows as Multiple Row) ===============
SELECT 'tblProducts' [TableName], COUNT(P.Id) [RowCount] FROM tblProducts P
UNION ALL
SELECT 'tblProductSales' [TableName], COUNT(S.Id) [RowCount] FROM tblProductSales S
--============== SECOND WAY (Shows in a Single Row) =============
SELECT
(SELECT COUNT(Id) FROM tblProducts) AS ProductCount,
(SELECT COUNT(Id) FROM tblProductSales) AS SalesCount
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all
o
SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
select @count = sum(data) from
(
select count(*) as data from #tempregion
union
select count(*) as data from #tempmetro
union
select count(*) as data from #tempcity
union
select count(*) as data from #tempzips
) a