1
Ich habe zwei Tabellen T1 und T2.SQL-Anweisung für diese Abfrage optimieren?
T1 hat ID, F1, F2, F3, F4, F5, F6, F7, F8
T2 haben ID, T1_ID, F1, F2, F3, F4, F5, F6, F7, F8, SUM
Beispiele Daten für T1 und T2
T1
ID,F1,F2,F3,F4,F5,F6,F7,F8
1, 1, 2, 3, 0, 0, 5, 0, 0
2, 0, 0, 0, 1, 0, 4, 5, 0
3, 4, 1, 3, 2, 0, 0, 0, 5
4, 1 ,3, 4, 0, 0 ,0, 0, 0
5, 7, 2, 1, 3, 0, 0, 0, 0
.
.
.
T2
ID,T1_ID,F1,F2,F3,F4,F5,F6,F7,F8,SUM
1, 1, 2, 3, 5, 0, 0, 3, 0, 0,100
2, 5, 9, 8, 8, 1, 0, 0, 0, 0,200
3, 2, 0, 0, 0, 5, 0, 6, 6, 0,300
4, 1 ,3, 4, 2, 0 ,0, 3, 0, 0,255
5, 4, 8, 8, 8, 0, 0, 0, 0, 0,155
.
.
Select * from T2 wo T1.F1 .... T1.F8 haben (1 und 2 und 3)
Abfrage 1 Datensätze zurückgeben müssen, 2,4
1, 1, 2, 3, 5, 0, 0, 3, 0, 0,100
2, 5, 9, 8, 8, 1, 0, 0, 0, 0,200
4, 1 ,3, 4, 2, 0 ,0, 3, 0, 0,255
Ich schaffe diese Abfrage
Select T2.ID,T2.F1,T2.F2,T2.F3,T2.F4.T2.F5,T2.F6,T2.F7,T2.F8,T2.SUM,T1.ID
from T2
join T1 on T1.ID = T2.T1_ID
where
(CASE WHEN (T1_ID.F1 = 1) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 2) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
or
(CASE WHEN (T1_ID.F1 = 1) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F2 = 2) THEN T2.F2 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
or
(CASE WHEN (T1_ID.F1 = 1) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F3 = 2) THEN T2.F3 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
or
(CASE WHEN (T1_ID.F1 = 1) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F4 = 2) THEN T2.F4 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
.
.
.
or
(CASE WHEN (T1_ID.F2 = 1) THEN T2.F2 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 2) THEN T2.F1 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
or
(CASE WHEN (T1_ID.F2 = 1) THEN T2.F2 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F2 = 2) THEN T2.F2 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
or
(CASE WHEN (T1_ID.F2 = 1) THEN T2.F2 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F3 = 2) THEN T2.F3 between 0 and 1000 end)
and(CASE WHEN (T1_ID.F1 = 3) THEN T2.F1 between 0 and 1000 end)
.
.
.
dies ist zu groß Aussage. Wie kann ich die Aussage optimieren?
Sie haben bereits eine ähnliche Frage. (Noch das gleiche) Es gibt zwei Antworten dort, und Sie haben keine Reaktion auf sie. Bitte bearbeiten Sie Ihre vorherige Frage. –
Mögliches Duplikat von [Beste SQL-Anweisung für diese Tabelle?] (Https://stackoverflow.com/questions/44179634/best-sql-statement-for-this-table) –
Die Fragen sind ähnlich ja, aber nicht gleich. Im zweiten vergleiche ich zwei Tabellen und suche nach einer besseren Aussage dafür. – user2531567