我的数据库中有两个表tableA和tableB。
tableA:
id | col1 | col2 | in_b
-----------------------
1 | "abc" | "efg" | false
2 | "foo" | "bar" | false
tableB:
id | col1 | col2
------------------
1 | "abc" | "bar"
我想更新in_b列,如果col1或col2的值与tableB中的行匹配,则为true。例如,两个in_b
标志都是真的,因为" abc"在tableB的col1和" bar"在tableB的col2中。 col1和col2不是唯一的。
更新in_b标志的最佳方法是什么?
答案 0 :(得分:2)
我认为你想要的东西是
UPDATE tableA
SET in_b = TRUE
WHERE EXISTS ( SELECT 1 FROM tableB
WHERE (tableB.col1 = tableA.col1 OR tableB.col2 = tableA.col2)
)
答案 1 :(得分:1)
根据您的问题,两个表上的ID之间没有任何关联,并尝试匹配tablea
和tableb
(col1,col2)中的两列,只是完全搜索值。所以你的更新将是:
update tablea a inner join tableb b on ( (a.col1=b.col1 or a.col1=b.col2) or
(a.col2=b.col1 or a.col2=b.col2) )
set a.in_b = true;
在这里查看小提琴:http://sqlfiddle.com/#!2/3b847/1
在我的示例中,我在tablea
上添加了一行,tableb