CROSS JOIN и ОБНОВЛЕНИЕ ТРЕТЬЕГО СТОЛА не работает - PullRequest
0 голосов
/ 21 сентября 2011

У меня следующая проблема.У нас есть две таблицы, которые выглядят так:

[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*
  • У нас около 20 шкал (здесь я просто показываю шкалы 1 и 2)
  • S1 (S2) И E1 (E2) Представлять соответственно начальную и конечную позиции по шкале
  • L1 (L2) - длина каждого сегмента.Сегмент из t1 может перекрывать
  • сегменты из t2 и наоборот. Несколько сегментов могут перекрывать друг друга

Чтобы выбрать сегменты, которые перекрывают друг друга, мне нужно сделать CROSS JOIN из t1 иt2 и найдите, какие сегменты из t2 перекрывают те в t1, а затем вставьте их в t3.

Если я выполняю таблицу UPDATE, которая возвращает 0, совпадают строки

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;

Если я делаю INSERT INTO t3 (или INNER JOIN), который не заменяет CROSS JOIN.... так что я не знаю, что делать отсюда ..

1 Ответ

0 голосов
/ 21 сентября 2011

Я считаю, что ваш синтаксис запроса неправильный.

Синтаксис команды обновления был update <table> set x=(select query),... where ...

И более того, похоже, что вы присоединяетесь к T3 в процессе и пытаетесь обновить временнуютаблица (t3 CROSS JOIN (t1, t2)), созданная в команде соединения.

Проверьте также синтаксис перекрестного соединения.

...