Hallo Leute!
Ich hab da echt ein Problem, das ziemlich verwirrend ist. Vielleicht
könnt ihr mir da helfen. Also ich versuch euch das mal zu erklären.
Ich programmiere C unter Linux mit MySQL. So und nun zu der Erklärung.
Also ich habe in meinem Programm 4 Tabellen, in denen Infos stehen, die
ich benötige. Die Tabellen sehen so aus:
Tabelle 1 (ist die auf der der UPDATE-Befehl angewendet werden soll):
Tabelle 2:
Tabelle 3:
Tabelle 4:
So das ist also der Aufbau der Tabellen. Jetzt will ich folgendes: Ich
muss in Tabelle 1 das Feld SRC_NAS befüllen. Die Kriterien dafür sind
folgende: Zuerst muss in Tabelle 2 nachgesehen werden ob WBA = 2.
Sollte dies der Fall sein, muss in Tabelle 1 nachgesehen werden ob TYPE
= Request und dann bei Tabelle 1 ob in LN_Country und LN_Operator etwas
steht. Sollte da etwas stehen, dann muss dieser Inhalt mit den Spalten
von Tabelle 3 verglichen werden und dann die MCC und die MNC (die aus
Tabelle 1 und Tabelle 3) verglichen werden mit den MCC und MNC aus
Tabelle 4. Wenn die zutreffen, dann muss aus Tabelle 4 der
Betreibername in Tabelle 1 unter SRC_NAS eingetragen werden. So das ist
das erste Kriterium. Und jetzt kommt das zweite. Sollte nämlich in
Tabelle 2 WBA = 2 sein, aber in Tabelle 1 unter LN_Operator und
LN_Country nichts stehen, dann muss die Spalte SRC_IP unter Tabelle 1
mit der IP in Tabelle 2 verglichen werden und wenn die übereinstimmen
muss der MCC und der MNC aus Tabelle 2 mit Tabelle 4 verglichen werden
und der Betreiber (bei dem MNC und MCC gleich sind) ind die Tabelle 1
unter SRC_NAS eingetragen werden.
Das ist also das Kriterium. Nur ich check nicht ganz wie ich das machen
soll. Ich hab auch schon nen Ansatz, der aber nicht so ganz
funktioniert. Hier mal mein SQL_Befehl:
Da fehlt was, nur ich weiß nicht genau was. Könnt ihr mir da helfen?
Habt ihr vielleicht nen Ansatz, der leichter gehen könnte als SELECT
CASE? Bin für jede Hilfe dankbar.
Gruß Benjamin
P.S.: Ich hoffe ich konnte es verständlich posten!
Ich hab da echt ein Problem, das ziemlich verwirrend ist. Vielleicht
könnt ihr mir da helfen. Also ich versuch euch das mal zu erklären.
Ich programmiere C unter Linux mit MySQL. So und nun zu der Erklärung.
Also ich habe in meinem Programm 4 Tabellen, in denen Infos stehen, die
ich benötige. Die Tabellen sehen so aus:
Tabelle 1 (ist die auf der der UPDATE-Befehl angewendet werden soll):
Code:
TYPE SRC_IP SRC_NAS LN_Country LN_Operator
Request 192.168.0.1 Deutschland Deutsch
Request 192.168.0.2
Request 192.168.0.3
...
Tabelle 2:
Code:
IP Name WBA MCC MNC
192.168.0.1 TMEU 2 12 14
192.168.0.2 TMUS 2 16 22
...
Tabelle 3:
Code:
LN_Operator LN_Country MCC MNC
Deutsch Deutschland 12 14
Ami USA 16 22
...
Tabelle 4:
Code:
Betreiber MCC MNC
Telekom 12 14
O2 16 22
...
So das ist also der Aufbau der Tabellen. Jetzt will ich folgendes: Ich
muss in Tabelle 1 das Feld SRC_NAS befüllen. Die Kriterien dafür sind
folgende: Zuerst muss in Tabelle 2 nachgesehen werden ob WBA = 2.
Sollte dies der Fall sein, muss in Tabelle 1 nachgesehen werden ob TYPE
= Request und dann bei Tabelle 1 ob in LN_Country und LN_Operator etwas
steht. Sollte da etwas stehen, dann muss dieser Inhalt mit den Spalten
von Tabelle 3 verglichen werden und dann die MCC und die MNC (die aus
Tabelle 1 und Tabelle 3) verglichen werden mit den MCC und MNC aus
Tabelle 4. Wenn die zutreffen, dann muss aus Tabelle 4 der
Betreibername in Tabelle 1 unter SRC_NAS eingetragen werden. So das ist
das erste Kriterium. Und jetzt kommt das zweite. Sollte nämlich in
Tabelle 2 WBA = 2 sein, aber in Tabelle 1 unter LN_Operator und
LN_Country nichts stehen, dann muss die Spalte SRC_IP unter Tabelle 1
mit der IP in Tabelle 2 verglichen werden und wenn die übereinstimmen
muss der MCC und der MNC aus Tabelle 2 mit Tabelle 4 verglichen werden
und der Betreiber (bei dem MNC und MCC gleich sind) ind die Tabelle 1
unter SRC_NAS eingetragen werden.
Das ist also das Kriterium. Nur ich check nicht ganz wie ich das machen
soll. Ich hab auch schon nen Ansatz, der aber nicht so ganz
funktioniert. Hier mal mein SQL_Befehl:
Code:
UPDATE tabelle1, tabelle2, tabelle3, tabelle4 SET tabelle1.SRC_NAS =
(SELECT CASE WHEN tabelle2.WBA = 2 AND tabelle1.TYPE = 'Request' AND
tabelle1.LN_Operator = tabelle3.LN_Operator AND tabelle1.LN_Country =
tabelle3.LN_Country THEN tabelle3.MCC = tabelle4.MCC AND tabelle3.MNC =
tabelle4.MNC ELSE tabelle1.SRC_IP = tabelle2.IP AND tabelle2.MCC =
tabelle4.MCC AND tabelle2.MNC = tabelle4.MNC)
Da fehlt was, nur ich weiß nicht genau was. Könnt ihr mir da helfen?
Habt ihr vielleicht nen Ansatz, der leichter gehen könnte als SELECT
CASE? Bin für jede Hilfe dankbar.
Gruß Benjamin
P.S.: Ich hoffe ich konnte es verständlich posten!