2011-09-21 3 views
0

J'ai le problème suivant. Nous avons deux tables qui ressemblent à ce que:CROSS JOIN et mise à jour TROISIÈME TABLE ne fonctionne pas

[t1] 
Ruler ID1 S1 E1 
**1  a 1 10** 
1  b 17 24 
1  c 20 24 
1  d 21 24 
*2  e 40 47*  

[t2] 
Ruler ID2 S2 E2 
**1  a 7 15** 
**1  b 8 16** 
2  c 25 35 
*2  d 41 50* 

[t3] 
Ruler ID1 S1 E1 ID2 S2 E2 
**1  a 1 10 a 7 15 
1  a 1 10 b 8 16** 
*2  e 40 7 d 41 50* 
  • Nous avons environ 20 échelles (ici je montre juste échelle 1 et 2)
  • S1 (S2) et E1 (E2) REPRÉSENTEZ commence respectivement et à la fin position sur une échelle
  • L1 (L2) est la longueur de chaque segment. Segment de t1 peut chevaucher
  • segments de t2 et vice-versa segments multiples peuvent se chevaucher les uns autres

Pour sélectionner les segments qui se chevauchent les uns les autres que je dois faire une CROSS JOIN t1 et t2 et trouver quel segment de t2 chevauchent ceux de t1, puis les insèrent dans t3.

Si je retourne la table UPDATE 0 lignes de match

UPDATE t3 CROSS JOIN (t1, t2) ON 
    ((t2.S2 BETWEEN t1.S1 AND t1.E1) OR (t2.E2 BETWEEN t1.S1 AND t1.E1)) 
SET t3.CHR1 = t1.CHR1, t3.ID1 = t1.ID1, t3.S1 = t1.S1, t3.E1 = t1.E1, t3.ID2 = 
t2.ID2, t3.S2 = t2.S2, t3.E2 = t2.E2 
WHERE t1.CHR1 = t2.CHR2; 

Si je n'INSERT INTO t3 (ou un INNER JOIN) qui ne remplace pas un CROSS JOIN. ... Donc, je ne sais pas quoi faire à partir d'ici ..

Répondre

0

Je crois que la syntaxe de votre requête est erronée.

syntaxe de commande de mise à jour a été update <table> set x=(select query),... where ...

Et plus ici il semble que vous joindrez T3 dans le processus et en essayant de mettre à jour la table temporaire (t3 CROSS JOIN (t1, t2)) créé dans la commande join.

Veuillez également vérifier la syntaxe de la jointure croisée.

+0

le problème est que plusieurs segments de t2 peuvent chevaucher t1. – madkitty