SQL zwei Zellen aus gleicher Tabelle subtrahieren

pette

Grünschnabel
Hallo,

ich bin neu in die welt der SQL Abfragen eingestiegen und stehe vor einem Problem. Ich hatte gehofft, dass einer von euch mir helfen kann.
Ich habe eine Abfrage die so aussieht, aber nicht funktioniert. Kann mir helfen es zum funktionieren zu bringen.

Abfrage: Select Spalte1 from Tabelle1 where Bedingung minus Select Spalte2 from Tabelle1 where Bedingung

Vielen Dank und Grüße

Pette
 
MINUS gibts nicht.

Mit dem abstrakten SQL von dr kann ich dir nicht weiterhelfen. Poste das Richtige SQL.
 
Ja entschuldige, also hier der richtige code:


Select currentServiceHours from device where assignedRole='Channel1' minus select lastServiceHours from device where assigendRole='Channel1'
 
Als erstes brungt man ein SQL-Code in eine lesbare Form. inzeiler sind nicht geeignet
SQL:
SELECT currentservicehours 
FROM device 
WHERE assignedrole = 'Channel1' 
MINUS 
SELECT lastservicehours 
FROM device 
WHERE assigendrole = 'Channel1'


Mit einem LEFT JOIN und Prüfung auf NULL gehts auch
SQL:
SELECT
    d1.currentservicehours
FROM
    device AS d1
    LEFT JOIN device AS d2
        ON d1.currentservicehours = d2.lastservicehours 
WHERE
    d2.lastservicehours IS NULL
 
Zuletzt bearbeitet von einem Moderator:
vielen dank, aber irgendwie schein ich ein Verständnisproblem zu haben. Jetzt berechnet er die Spalte currentservicehours und lastservicehours der ganzen Tabelle, oder? Würde es auch nur von einer Zeile gehen?
Sorry für mein nicht-wissen :/
 
Stimmt, Du musst noch die 2 WHERE- Teile hinzufügen. Hab ich vergessen.

Es geht in einer Zeile, Sieh selber und sag dann, was lesbarer ist (Lesbar = man macht weniger Fehler)
PHP SQL-Statement in PHP lesbar darstellen

SQL:
SELECT d1.currentservicehours FROM device AS d1 LEFT JOIN device AS d2 ON d1.currentservicehours = d2.lastservicehours AND d1.assigendrole = d2.assigendrole WHERE d2.lastservicehours IS NULL AND d1.assigendrole = 'Channel1'

SQL:
SELECT
    d1.currentservicehours
FROM
    device AS d1
    LEFT JOIN device AS d2
        ON d1.currentservicehours = d2.lastservicehours 
        AND d1.assigendrole = d2.assigendrole
WHERE
    d2.lastservicehours IS NULL
    AND d1.assigendrole = 'Channel1'
 
Zuletzt bearbeitet von einem Moderator:
Okay, du hast vollkommen recht :) so ist es schon besser zu lesen.

Aber jetzt scheint er den wert von currentservicehours auszugeben. Der Wert von currentservicehours ist 1398 und von lastservicehours sind 1275, also sollte es 123 sein.
Als Ergebnis bringt er aber 1398.
 
Achso, du willst die Werte abziehen!
So wie dein erstes Query war, ist bei Oracle die EIne Menge an Zeilen minus die andere Menge.

Geschätzt so. Aber welche Felder für den JOIN gebraucht werden, habe ich geraten.
SQL:
SELECT
    d1.currentservicehours - d2.lastServiceHours
FROM
    device AS d1
    INNER JOIN device AS d2
        ON  d1.assigendrole = d2.assigendrole
WHERE
    d1.assigendrole = 'Channel1'

Ich rate dir dringend, dich mit der Dokumentatoin zu SQL auseinanderzusetzen. Was du haben willst, ist die leichteste Übung für eine Abfrage mit 2 Tabellen!
 
Zuletzt bearbeitet von einem Moderator:
super! Jetzt hat es geklappt.
Ich werde mich in nächster Zeit wohl intensiver damit beschäftigen. Danke für den Rat!
 
Zurück