【问题标题】:if statements in mysql?mysql中的if语句?
【发布时间】:2010-09-16 10:27:12
【问题描述】:

mysql查询语句有if语句吗?

当我更新表记录时,我只想更新某些列,如果它们有要更新的值。

例如,我想要一个更新表格功能,有一个表格供志愿者使用,还有一个表格供只需要电子邮件更新的人使用。

我想使用相同的函数(会有一个只处理 upd 查询的函数),理论上是否可以这样做......

如果您正在更新志愿者表,则只更新这些列,如果是 mailing_list,则更新这些

我知道这可以通过使用带有两个查询语句的 if 语句来完成,具体取决于您要更新的表,但我想知道是否可以只使用一个带有条件的查询语句来更新表格中的相应列。

这听起来像是你梦寐以求的事情,请告诉我。

谢谢。

【问题讨论】:

  • 您是否尝试在一个查询中更新两个表?你的问题不是很清楚
  • 所以,澄清一下。您希望一个 SQL 语句更新两个具有不同字段名称的不同表吗?类似于:更新志愿者,mailing_list SET IF(table = 志愿者,volEmail,mailEmail) = 'xyz';
  • @nickf - 没错,所以当我在路上进行更改时,我不必更改多个项目,而是一个查询。或者我应该对每个实例都有不同的查询,通过 switch/case 语句调用适当的查询。让我知道什么更实用。
  • 这让我认为,如果它们在性质上足够相似,您可以在相似查询之间切换,那么组合这些表可能会更好

标签: php mysql


【解决方案1】:

我认为这应该可行:

UPDATE volunteer, people
SET volunteer.email = 'me@email.com',
    people.email = 'other@gmail.com',
    people.first_name = 'first',
WHERE people.id = 2 AND volunteer.id = 5;

我是从 MySQL 网站上的 update syntax 获得的。

【讨论】:

    【解决方案2】:

    可以在一个查询中执行此操作,但我认为您为什么要这样做没有意义。 也许描述你想要的函数的参数以及它们会产生什么影响?

    您可以有条件地更新如下内容:

    update tablereferences
        set foo.bar = if( somebooleanexpression, newbarvalue, foo.bar ),
            baz.quux = if( somebooleanexpression, newbazvalue, baz.quux )
        where ...
    

    允许您使用相同的查询,但可以控制更新哪些表。

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2016-01-11
      • 2016-07-20
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多