【问题标题】:How to update a MYSQL column if the value's exist in another table?如果值存在于另一个表中,如何更新 MYSQL 列?
【发布时间】:2015-01-06 08:26:41
【问题描述】:

我的数据库中有两个表,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 中的一行匹配时为真。例如,in_b 标志都为真,因为“abc”在 tableB 的 col1 中,而“bar”在 tableB 的 col2 中。 col1 和 col2 不是唯一的。

更新 in_b 标志的最佳方法是什么?

【问题讨论】:

  • 现实生活中也只有两栏吗?
  • 您要检查tableA 中的每一 行与tableB 中的每一 行的匹配吗? col1col2 are not unique 的具体含义是什么?
  • 是的,我想将 tableA 的每一行与 tableB 的每一行进行匹配。

标签: mysql sql sql-update


【解决方案1】:

我想你想要一些类似的东西

UPDATE tableA
SET in_b = TRUE
    WHERE EXISTS ( SELECT 1 FROM tableB
                   WHERE (tableB.col1 = tableA.col1 OR tableB.col2 = tableA.col2)
                 )

【讨论】:

  • 请注意 OP 对其示例案例的描述:“in_b 两个标志都为真
  • 啊,是的,id 字段不是 FK。第一次错过了。答案相应调整。
  • 那你得给我解释一下,好人。我看过 Jorge 的回复,但不同意 OP 要求 A.col1 和 B.col2 需要进行比较。
  • 这正是 OP 在 cmets 上的回答。在他的问题上,他说col1 or col2's values matches a row in tableB 我理解a row 作为所有列。也许我错了。
  • @Jorge Campos:我不这么读- OP 的示例显示他正在将 col1 与 col1 进行比较,将 col2 与 col2 进行比较。我仍然不知道 PM 77-1 认为问题是什么......
【解决方案2】:

根据您的问题,两个表上的 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;

在 fiddle 上看到它:http://sqlfiddle.com/#!2/3b847/1

在我的示例中,我向tablea 添加了一行,而tableb 上没有任何匹配项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2012-09-17
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多