0

我有以下问题。我们有两个看起来像这样的表:

[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) AND E1(E2) 分别代表刻度上的开始和结束位置
  • L1(L2) 是每个段的长度。来自 t1 的段可以重叠
  • 来自 t2 的段,反之亦然 多个段可以相互重叠

要选择相互重叠的段,我需要对 t1 和 t2 进行交叉连接,然后找到 t2 中的哪些段与 t1 中的段重叠,然后将它们插入到 t3 中。

如果我执行返回 0 个匹配行的表 UPDATE

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。...所以我不知道从这里做什么..

4

1 回答 1

0

我相信您的查询语法是错误的。

更新命令语法是 update <table> set x=(select query),... where ...

在这里,您似乎正在加入 T3 并尝试更新t3 CROSS JOIN (t1, t2)在 join 命令中创建的临时表 ( )。

请检查交叉连接的语法。

于 2011-09-21T08:02:59.523 回答