SQL Problem auf der Arbeit

dettus

Bicycle User
Hallo!

Ich habe gerade ein SQL-Problem auf der Arbeit, daher kann ich leider nur etwas abstrakter fragen...
Aber es geht in diese Richtung:

Ich habe
  • Variablen
  • Intervalle

1 Variable ist auf n Intervallen definiert.


Dafuer habe ich mir schon die Tabelle gebaut, die im Anhang zu finden ist.
Code:
; sqlite3 variablenproblem.txt
sqlite> PRAGMA TABLE_INFO(variablen);
0|id|INTEGER|0||1
1|variable|TEXT|0||0
sqlite> PRAGMA TABLE_INFO(intervalle);
0|id|INTEGER|0||1
1|variable_id|INTEGER|0||0
2|von|INTEGER|0||0
3|bis|INTEGER|0||0
sqlite> SELECT * FROM variablen;
1|A
2|B
3|C
4|D
5|E
6|F
sqlite> SELECT * FROM intervalle;
1|1|3|7
2|2|8|10
3|1|8|10

Also, anders ausgedrueckt, habe ich die beiden Variablen A und B. A ist auf den Intervallen 3 bis 7, B auf 8 bis 10 definiert.


Damit ist es jetzt relativ einfach, rauszufinden, welche Variablen z.B. bei 9 definiert sind:

Code:
sqlite> SELECT variablen.variable FROM variablen INNER JOIN intervalle ON intervalle.variable_id = variablen.id WHERE intervalle.von<9 AND intervalle.bis>9;
B
A

Oder bei 4:

Code:
sqlite> SELECT variablen.variable FROM variablen INNER JOIN intervalle ON intervalle.variable_id = variablen.id WHERE intervalle.von<4 AND intervalle.bis>4;
A

MEIN PROBLEM IST: Ich will es aber andersrum.
Ich moechte wissen, welche Variablen eben NICHT auf 4 und 9 definiert sind; sprich: Welche kann ich noch benutzen?
Die Antwort sollte bei 4 B,C,D,E,F sein.
Und bei 9 C,D,E,F.


Weiss jemand, wie ich das am duemmsten mache?
 

Anhänge

Typisch... KAUM FRAGT MAN, FAELLT ES EINEM EIN!!!!
Code:
sqlite> SELECT * from variablen WHERE variable NOT IN (SELECT variablen.variable FROM variablen INNER JOIN intervalle ON intervalle.variable_id = variablen.id WHERE intervalle.von<4 and intervalle.bis>4);
2|B
3|C
4|D
5|E
6|F
sqlite> SELECT * from variablen WHERE variable NOT IN (SELECT variablen.variable FROM variablen INNER JOIN intervalle ON intervalle.variable_id = variablen.id WHERE intervalle.von<9 and intervalle.bis>9);
3|C
4|D
5|E
6|F

Hmmm... Oder weiss jemand eine bessere Antwort?
 
Zurück
Oben