Kann jemand einen Hinweis auf diesen geben? :mysql query performance
Ich habe eine Tabelle, sagen wir tblA, wo ich ID1 und ID2 als Spalten und Index (ID1, ID2) habe. Ich möchte die ID1's auswählen, wo ID2's zu mehreren Sets gehören. Deshalb würde ich sagen will
select id1 from tblA
where id2 in (val1,val2,val3 ...)
union
select id1 from tblA
where id2 in (val4,val2,val3 ...)
union
(...)*
Lassen Sie uns sagen, dass wir in der Tabelle A haben die folgenden:
(1,1)
(1,2)
(1,3)
(1,4)
(1,5)
(2,1)
(2,2)
(2,3)
Jetzt möchte ich alle id1
s, die id2 in (3,4)
haben.
Also was ich bekommen möchte ist id1 = 1
.
2
sollte nicht angezeigt werden, denn obwohl wir eine Beziehung haben (2,3)
haben wir (2,4)
nicht.
Haben Sie Ideen, wie Sie diese Abfrage durchführen? Ich denke, der obige Weg hat ein Problem mit der Leistung, wenn der (...) zu viel wächst !? Vielen Dank.
begrüßt
ok, also werde ich versuchen, es mit einem Beispiel zu erklären. Ich habe versucht, beide Ihre Fragen, aber es ist nicht das, was ich will. Nehmen wir an, wir haben in Tabelle A folgendes: (1,1), (1,2), (1,3), (1,4), (1,5), (2,1), (2, 2), (2,3). Jetzt möchte ich alle id1s, die id2 in (3,4) haben. Also, was ich will, bekommen seine id1s = "1". "2" sollte nicht Ursache sein, obwohl wir eine Beziehung (2,3) haben, die wir nicht (2,4) haben. Habe ich mich klar ausgedrückt? Das ist irgendwie schwer zu erklären ... danke trotzdem –
Nur aus Neugier, warum? :) Es gibt ein paar Antworten, die aussehen, als würden sie gut funktionieren. Welcher würde am meisten Sinn machen, und wenn etwas anderes für Sie besser funktionieren könnte, kann nicht ohne das warum beantwortet werden? Wenn sich die Dinge nicht oft ändern, können Sie Ihre Listen mit vielen Abfragen füllen und sie dann aktualisieren. Dann wird Ihre Antwort sofort sein. Das Erstellen einer einfachen temporären Tabelle mit nur der ID1 und einem booleschen Wert kann Ihnen helfen, jeden Satz zu filtern (d. H. Diejenigen zu finden, die in jedem Durchgang übereinstimmen). – TheJacobTaylor