1
我有两个表T1和T2。为此查询优化SQL语句?
T1有ID,F1,F2,F3,F4,F5,F6,F7,F8
T2具有ID,T1_ID,F1,F2,F3,F4,F5,F6,F7,F8,SUM
实例数据为T1和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 T 2,其中T1.F1 .... T1.F8具有(1和2和3)
查询必须返回记录1, 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
我创建这个查询
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)
.
.
.
这是太大的语句。 如何优化语句?
您已有类似问题。 (即使是一样)在那里有两个答案,你对他们没有任何反应。请编辑您之前的问题。 –
这个表最好的SQL语句的可能的重复?(https://stackoverflow.com/questions/44179634/best-sql-statement-for-this-table) –
这些问题是类似的是,但不相等。在第二部分中,我比较了两张表格,并为此寻找更好的说法。 – user2531567