【问题标题】:MySQL request from two tables interacting with each other来自相互交互的两个表的 MySQL 请求
【发布时间】:2011-10-20 08:49:12
【问题描述】:

我的桌子 Table1 user_id, date Table2 user_id, status

我需要类似的东西

UPDATE Table2 
   SET status = 2  
   WHERE user_id in ( {SELECT user_id FROM Table1 WHERE date > 0} )

换句话说,我需要查看 table1 中的日期是否大于 0000-00-00,然后获取符合此条件的人的 user_id 并在 table2 中使用它们将其状态设置为 2。 问题是我需要为多个用户执行此操作,因此请求内部的请求对我不起作用,它仅在结果中有一行时才有效。

【问题讨论】:

  • 为什么说子查询不起作用?

标签: mysql request


【解决方案1】:

我认为你写的应该可以,但是花括号是怎么回事?只需将它们删除即可:

UPDATE Table2 
   SET status = 2  
   WHERE user_id in (SELECT user_id FROM Table1 WHERE date > 0)

根据MySQL documentation,IN 应该使用子查询。

ANY 关键字必须跟在比较运算符之后,意思是“如果子查询返回的列中的任何值的比较结果为 TRUE,则返回 TRUE。”

当与子查询一起使用时,单词 IN 是 = ANY 的别名。

【讨论】:

  • 这不起作用 SELECT user_id FROM Table1 WHERE date > 0) 返回超过 1 行
  • @JohnA,它是给你一个错误信息,还是它没有做你想做的事?如果出现错误消息,请将消息添加到您的问题中。如果它不符合您的要求,请在您的问题中描述当前行为和期望的行为。
【解决方案2】:

您是否使用 PHP 或其他语言进行 SQL 调用?如果是这样,它可能更容易,

  • 首先:从表 1 中选择用户 ID
  • 其次:遍历每一行
  • 第三点:执行更新

问候, 标记

【讨论】:

  • 我不是 SQL 方面的专家,但我个人认为使用 PHP 来利用 SQL 查询所需的一些逻辑并没有什么坏处。可能更有害的是花费超过一天的时间试图找到一个“优雅”的解决方案。
  • 换句话说,我不知道:)
猜你喜欢
  • 1970-01-01
  • 2017-03-01
  • 2018-09-24
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
相关资源
最近更新 更多