Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果值为';在另一张桌子上有吗?_Mysql_Sql_Sql Update - Fatal编程技术网

Mysql 如果值为';在另一张桌子上有吗?

Mysql 如果值为';在另一张桌子上有吗?,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和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标志的最佳方式是什么

我想你想要的是类似于

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;