如果值存在于另一个表中,如何更新MYSQL列?

时间:2015-01-05 23:55:45

标签: mysql sql sql-update

我的数据库中有两个表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标志的最佳方法是什么?

2 个答案:

答案 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之间没有任何关联,并尝试匹配tableatableb(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

没有任何匹配