SQL-Abfrage..
SQL-Abfrage..
Hi,
irgendwie sitze ich momentan auf der Leitung..
Ich will eine SQL-Anweisung entwerfen, die mir eine Liste ausgewählter Spalten von Tabelle 1 in Abhängigkeit von Tabelle 2 ausgibt.
In Tabelle 1 werden div. Messdaten und in Tabelle 2 alle Events, welche sich auf Zeilen (=ID) in Tabelle 1 beziehen, abgelegt.
Tabelle 1 enthält eine Spalte ID, welcher der Primärschlüssel ist.
Die restl. Spalten sind irrelevant für die Abfragebedingung.
Tabelle 2 sieht so aus:
ID = Primärschlüssel, AutoIncrement (wird nicht weiter verwendet)
Tab1_ID = verweist auf zugehörige Zeile (=ID) in Tabelle 1
Event_Type = Was ist passiert? ("EV1", "EV2", "EV3", ..)
Event_Date = Wann ist es passiert?
In Tabelle 2 kann es VIELE Records geben, die sich auf eine Zeile (=ID) in Tabelle 1 beziehen.
(Aktuell enthält Tabelle 2 etwa 2Mio. Einträge und es werden stetig mehr..)
Und nun die Bedingungen die mir Kopfschmerzen bereiten:
Ich will alle Einträge aus Tabelle 1 selektieren, bei denen ein bestimmtes Ereignis "EV1" bereits eingetreten, aber noch kein Ereignis "EV3" eingetreten ist.
Kann mir hier jemand auf die Sprünge helfen, wie ich das effektiv löse, ohne die ganze Tabelle in PB auswerten zu müssen?
Ich würde diese Arbeit lieber der DB-Engine (MySQL) überlassen und zusätzlich das Netzwerk schonen..
Danke!
irgendwie sitze ich momentan auf der Leitung..
Ich will eine SQL-Anweisung entwerfen, die mir eine Liste ausgewählter Spalten von Tabelle 1 in Abhängigkeit von Tabelle 2 ausgibt.
In Tabelle 1 werden div. Messdaten und in Tabelle 2 alle Events, welche sich auf Zeilen (=ID) in Tabelle 1 beziehen, abgelegt.
Tabelle 1 enthält eine Spalte ID, welcher der Primärschlüssel ist.
Die restl. Spalten sind irrelevant für die Abfragebedingung.
Tabelle 2 sieht so aus:
ID = Primärschlüssel, AutoIncrement (wird nicht weiter verwendet)
Tab1_ID = verweist auf zugehörige Zeile (=ID) in Tabelle 1
Event_Type = Was ist passiert? ("EV1", "EV2", "EV3", ..)
Event_Date = Wann ist es passiert?
In Tabelle 2 kann es VIELE Records geben, die sich auf eine Zeile (=ID) in Tabelle 1 beziehen.
(Aktuell enthält Tabelle 2 etwa 2Mio. Einträge und es werden stetig mehr..)
Und nun die Bedingungen die mir Kopfschmerzen bereiten:
Ich will alle Einträge aus Tabelle 1 selektieren, bei denen ein bestimmtes Ereignis "EV1" bereits eingetreten, aber noch kein Ereignis "EV3" eingetreten ist.
Kann mir hier jemand auf die Sprünge helfen, wie ich das effektiv löse, ohne die ganze Tabelle in PB auswerten zu müssen?
Ich würde diese Arbeit lieber der DB-Engine (MySQL) überlassen und zusätzlich das Netzwerk schonen..
Danke!
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: SQL-Abfrage..
Tabelle 1:
ID | MW1 | MW2 | ...
=================
100 | xyz | xyz | ...
101 | xyz | xyz | ...
102 | xyz | xyz | ...
103 | xyz | xyz | ...
Tabelle 2:
ID | Tab1_ID | Event_Type | Event_Date
===============================
20 | 100 | EV1 | Datum
21 | 103 | EV1 | Datum
22 | 102 | EV2 | Datum
23 | 103 | EV1 | Datum
24 | 101 | EV2 | Datum
25 | 100 | EV1 | Datum
26 | 103 | EV3 | Datum
27 | 100 | EV1 | Datum
28 | 102 | EV1 | Datum
29 | 101 | EV2 | Datum
30 | 100 | EV1 | Datum
31 | 103 | EV1 | Datum
ID | MW1 | MW2 | ...
=================
100 | xyz | xyz | ...
101 | xyz | xyz | ...
102 | xyz | xyz | ...
103 | xyz | xyz | ...
Tabelle 2:
ID | Tab1_ID | Event_Type | Event_Date
===============================
20 | 100 | EV1 | Datum
21 | 103 | EV1 | Datum
22 | 102 | EV2 | Datum
23 | 103 | EV1 | Datum
24 | 101 | EV2 | Datum
25 | 100 | EV1 | Datum
26 | 103 | EV3 | Datum
27 | 100 | EV1 | Datum
28 | 102 | EV1 | Datum
29 | 101 | EV2 | Datum
30 | 100 | EV1 | Datum
31 | 103 | EV1 | Datum
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: SQL-Abfrage..
Hi ... also um das über eine einzige SELECT-Abfrage zu machen bin ich überfragt.
Wenn Tabelle 1 aber nicht zuuuu viele Einträge enthält, würde ich's 'zu Fuß' machen:
Also alle Einträge aus Tabelle 1 abrufen und dann für jeden Eintrag aus Tabelle 1 einen SELECT in Tabelle 2 für die ID und die beiden Events machen.
Wenn der SELECT für das erste Event Ergebnisse geliefert hat und der SELECT für das zweite Event nicht, dann hast Du einen Treffer.
Wenn Tabelle 1 aber nicht zuuuu viele Einträge enthält, würde ich's 'zu Fuß' machen:
Also alle Einträge aus Tabelle 1 abrufen und dann für jeden Eintrag aus Tabelle 1 einen SELECT in Tabelle 2 für die ID und die beiden Events machen.
Wenn der SELECT für das erste Event Ergebnisse geliefert hat und der SELECT für das zweite Event nicht, dann hast Du einen Treffer.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: SQL-Abfrage..
Code: Alles auswählen
Select * From [Tabelle 1], [Tabelle 2]
Where [Tabelle 1].ID = [Tabelle 2].Tab1_ID
And [Tabelle 2].Event_Type = 'EV1'
Hygge
Re: SQL-Abfrage..
Code: Alles auswählen
SELECT Tab1.ID FROM Tab1, Tab2 WHERE Tab2.Tab1_ID = Tab1.ID
EXCEPT
SELECT Tab2.Tab1_ID FROM Tab2 WHERE Tab2.Event_Type = 'EV3'
Signatur und so
Re: SQL-Abfrage..
EXCEPT gibt es doch (so viel ich weiß) bei MySQL nicht.. :-/Derren hat geschrieben:Code: Alles auswählen
SELECT Tab1.ID FROM Tab1, Tab2 WHERE Tab2.Tab1_ID = Tab1.ID EXCEPT SELECT Tab2.Tab1_ID FROM Tab2 WHERE Tab2.Event_Type = 'EV3'
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: SQL-Abfrage..
Das erfüllt leider nicht meine Bedingung, da "..aber noch kein Ereignis "EV3" eingetreten ist."Kiffi hat geschrieben:Grüße ... PeterCode: Alles auswählen
Select * From [Tabelle 1], [Tabelle 2] Where [Tabelle 1].ID = [Tabelle 2].Tab1_ID And [Tabelle 2].Event_Type = 'EV1'
hiermit nicht erfüllt werden kann..
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: SQL-Abfrage..
Momentan >375'000 mit 48 Spalten - Überwiegend Double..PureLust hat geschrieben:Wenn Tabelle 1 aber nicht zuuuu viele Einträge enthält, würde ich's 'zu Fuß' machen:
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: SQL-Abfrage..
Mir ist vorhin eine Idee gekommen, ob man das nicht mit einer temporären Tabelle lösen könnte..
Ich teste mal..
Ich teste mal..
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: SQL-Abfrage..
Code: Alles auswählen
select * from tab1, tab2 where tab2.tab1_id = tab1.id and tab2.event = ev1 and tab1.id not in (select distinct tab1_id from tab2 where event = ev3)
Code: Alles auswählen
select * from tab1 right join tab2 on tab1.id = tab2.tab1_id where tab2.event = ev1 and tab1.id not in (select distinct tab1_id from tab2 where event = ev3)
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de