Mysql 如果值为';在另一张桌子上有吗?
我的数据库中有两个表,tableA和tableBMysql 如果值为';在另一张桌子上有吗?,mysql,sql,sql-update,Mysql,Sql,Sql Update,我的数据库中有两个表,tableA和tableB tableA: id | col1 | col2 | in_b ----------------------- 1 | "abc" | "efg" | false 2 | "foo" | "bar" | false 我想更新in_b列,以便在col1或col2的值与tableB中的行匹配时为true。例如,两个in_b标志都是真的,因为“abc”在表b的第1列,“bar”在表b的第2列。col1和col2不是唯一的 更新in_b标志
tableA:
id | col1 | col2 | in_b
-----------------------
1 | "abc" | "efg" | false
2 | "foo" | "bar" | false
我想更新in_b列,以便在col1或col2的值与tableB中的行匹配时为true。例如,两个
in_b
标志都是真的,因为“abc”在表b的第1列,“bar”在表b的第2列。col1和col2不是唯一的
更新in_b标志的最佳方式是什么 我想你想要的是类似于
UPDATE tableA
SET in_b = TRUE
WHERE EXISTS ( SELECT 1 FROM tableB
WHERE (tableB.col1 = tableA.col1 OR tableB.col2 = tableA.col2)
)
根据您的问题,两个表上的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;
在小提琴上看到它:
在我的示例中,我在
表格a
中添加了一行,该行在表格B
中没有任何匹配项。在现实生活中,它是否也只有两列?是否要检查表格a
中的每一行与表格B
中的每一行的匹配情况?您对col1
和col2
的具体含义是什么?是的,我想将tableA的每一行与tableB的每一行进行匹配。请在OP对其示例案例的描述中注意:“两个in_b
标志都是真的”啊,是的,id
字段不是FK。第一次就错过了。答案做了相应的调整。那你就得向我解释了,哦,伟大的人。我看到了Jorge的回答,但我不同意OP要求对A.col1和B.col2进行比较。这正是OP在评论中的回答。在他的问题上,他说col1或col2的值与表B中的一行匹配
我理解a行
为所有列。也许我错了。@Jorge Campos:我不是这么看的——OP的例子显示他在比较col1和col1,以及col2和col2。我仍然不知道PM 77-1认为问题是什么。。。
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;