Problem mit subtrahieren von Werten

Tuts4you

Erfahrenes Mitglied
Hallo!

zur Erklärung:
habe die Tabellen Province und Country. Ich will schaun, ob die Population von Country Austria mit der addierten Summe von Province (Wien, Kärnten, Burgenland etc) übereinstimmt. Aus diesem Grund will ich die 2 Werte subtrahieren. Kommt 0 raus --> stimmen sie überein

PHP:
select sum(population) from province where country= 'A'
minus
select population from country where code = 'A'
das kommt raus:
PHP:
SUM(POPULATION)        
---------------------- 
7989000                

1 rows selected
DAS IST ABER FALSCH
Die Summe von Population ist 7989000 ABER die Population in Country ist 8023244!
Warum werden die 2 Werte nicht subtrahiert?

Was mache ich falsch?!

Danke für eure Hilfe!
 
Dein Query ist nicht wirklich richtig, vermute ich, versuch es einmal so:

SQL:
SELECT 
(SELECT SUM(`population`) FROM `province` WHERE `country` = 'A') 
-
(SELECT `population` FROM `country` WHERE `code` = 'A')

"minus" finde ich bei MySQL nicht.
Funktioniert aber erst ab Version 4.1+, wegen der Subqueries.
 
Hallo,

MINUS gehört zu den Mengenoperatoren und hat nichts mit Subtraktion zu tun.
Wenn es von der Datenbank unterstützt wird, so kann man damit die Datensätze erhalten, die im ersten SELECT-Block enthalten sind, abzüglich denen, die im zweiten SELECT-Block enthalten sind.
Es wird also keinerlei Subtraktion durchgeführt, sondern nur eine Mengenoperation, vergleichbar mit UNION, UNION ALL, INTERSECT usw.

So wie es Felix beschrieben hat, sollte es das Ergebnis bringen, was du erwartest.

Markus
 
Danke für die Antworten.
Ich hab vergessen zu erwähnen, dass ich auf einer Oracle DB arbeite.
Wenn ich jetzt deinen Vorschlag ausprobiere bekomme ich flg. Fehlermeldung:

PHP:
Error starting at line 1 in command:
select
(select sum(population) from province where country = 'A')
-
(select population from country where code = 'A')
Error at Command Line:4 Column:49
Error report:
SQL Error: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:

:(
 
Hallo,

ja bei Oracle musst du zwingend eine Tabelle in der FROM-Klausel angeben.
Also in der äusseren Query einfach noch ein

SQL:
...
FROM DUAL

anhängen.

Markus
 
Danke für den Tipp!
Meinst du das so?

PHP:
select
(select field from dual table)
-
(select field from dual table)

oder doch ganz anders?
 
Hallo,

nein so:

SQL:
SELECT
 (SELECT SUM(population) FROM province WHERE country = 'A')
 -
 (SELECT population FROM country WHERE code = 'A') 
FROM DUAL

Markus
 
Zurück