2011-01-17 8 views
1

Wie kann ich die Anzahl der Zeilen in zwei verschiedenen Tabellen unterscheiden?SQL * Plus: Unterschied in der Anzahl der Zeilen in zwei Tabellen

SQL> select count(*) from dual44; 

    COUNT(*) 
---------- 
     3 

SQL> select count(*) from dual; 

    COUNT(*) 
---------- 
     1 

SQL> (select count(*) from dual44) 
    2 minus 
    3 (select count(*) from dual) 
    4 ; 

    COUNT(*) 
---------- 
     3 

SQL> 

Ich brauche 2 als Ergebnis. Die beiden Tabellen müssen nicht unbedingt die gleiche Schema haben.

Antwort

5

Mit dem Minus-Operator werden alle Datensätze der ersten Ergebnismenge entfernt, die auch in der zweiten enthalten sind. Verwenden Sie - (Strich) Operator hier.

select ((select count(*) from dual44) - (select count(*) from dual)) from dual 
+0

ich dies unter dem Strich Zeichen: ORA-00933: SQL-Befehl nicht richtig beendet – Moeb

+0

ja du hast recht, müssen Sie diese einbetten in einer gültigen Select-Abfrage – lweller

0
select count(*) - (select count(*) from dual) 
from dual44 

MINUS ist eine SQL-Set-Operation, die hier nicht benötigt wird, nur - verwenden.

+0

bekomme ich das: ORA-00937: nicht eine Gruppe Gruppenfunktion (unter der zweiten Anzahl (*)) – Moeb

+0

@Amoeba, wenn Sie 'GROUP BY'-Klausel verwenden alle einzelnen Spaltenausdrücke in SELECT aufgeführt muss unter "GROUP BY" stehen oder wie MIN, MAX usw. aggregiert sein. – nan

0
SELECT (a.count-b.count) 
FROM 
    (SELECT COUNT(*) count FROM dual44) a, 
    (SELECT COUNT(*) count FROM dual) b; 
0

Das folgende ist wirklich schnell (weniger als 1 Sekunde für die Tabellen von mehreren hundert Millionen Datensätze) vorausgesetzt, dass die Statistiken auf dem neuesten Stand sind (was sehr zu empfehlen ist).

select 
(
(select u.NUM_ROWS from user_tables u where u.TABLE_NAME='JOBS') 
- 
(select u.NUM_ROWS from user_tables u where u.TABLE_NAME='COUNTRIES') 
) DIFF 
from dual 


    DIFF 
---------- 
     -6 

Beispielcode gilt für HR-Schema von ORACLE. Sie können die Tabellennamen ändern.

Die beiden Tabellen müssen nicht unbedingt dasselbe Schema haben.

Bearbeiten auf Jeffrey Kemp Kommentar:

Wenn Tabellen auf verschiedenen Schemata sind, haben Sie dba_tables verwenden, wenn Sie die Berechtigungen verfügen.

Fügen Sie einfach den Schemanamen zum Tabellennamen hinzu. HR.JOBS dh

+1

(1) Wenn sie nicht im selben Schema sind, wirst du die Statistiken in 'user_ nicht finden. Tische "; (2) Das OP gab nie an, dass sie nur eine grobe Schätzung auf der Grundlage von Statistiken wünschten, und erwähnten auch nicht, dass die Leistung ein Problem sei. –

+0

@ JeffreyKemp (1) Danke, du hast recht, ich habe die Antwort aktualisiert. (2) Ich denke, Leistung ist etwas, was man oft, wenn nicht immer, berücksichtigen sollte. Ja, OP hat nicht spezifiziert, aber besonders in OLAP-Datenbanken, wo Tabellen nicht häufig aktualisiert werden, scheint dies ein praktikabler Weg zu mir zu sein. – bonsvr

-1

In Sqlite würde dies funktioniert:

Select (Select count(col1) from Table1) - (Select count(col2) from Table2))