0

私のクエリでは、フィールドの値 (field1 など) に基づいて 2 つのテーブルを結合したいと考えています。field1 の値に応じて、結合は次のいずれかになります。

field3 = field4 OR field5 = field6

何かのようなもの

join on    
  CASE FIELD1    
   When 1 THEN FIELD 2 = FIELD3    
   When 2 THEN FIELD 4 = FIELD5    
  END

私は現時点でこのようなことをしています

 .... join on  (field1=1 AND field2=field3) OR (field1=2 AND field4=field5)

ただし、クエリを実行するには時間がかかります。2 つの条件はそれぞれ 7 秒未満で完了します

これどうやってするの?

4

5 に答える 5

1

or ではインデックスを使用できないため、時間がかかります。私が考えることができる最も簡単な解決策は、2つの選択を行い、それらを結合することです.

select ...
from ...
join ...
   on  (field1=1 AND field2=field3)
union
select ...
from ...
join ...
   on  (field1=2 AND field4=field5)
于 2012-09-25T13:58:33.503 に答える
0
SELECT * 
FROM data_parent
WHERE pid = 
CASE 
WHEN pid =1
THEN (
SELECT id
FROM data_parent, test
WHERE data_parent.pid = test.id
)

data_parent and test are two tables

data_parent has column pid and test has an column rpid as foreign key.

This works and gives me the output.

于 2012-09-25T15:18:50.643 に答える
0

結合条件での「または」の問題は、インデックスの使用を妨げ、ネストされたループ結合を助長する傾向があることです。結合を 2 回行うことをお勧めします。

from A left outer join
     B b1
     on a.field2 = b2.field3 left outer join
     B b2
     on a.field4 = b2.field5

左外部結合により、すべての行が確実に保持されます。SELECT または WHERE 句で追加のロジックを実行して、必要な完全なロジックを取得できます。

于 2012-09-25T13:57:47.143 に答える