可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用

Posted

技术标签:

【中文标题】可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用【英文标题】:Can use IF() in a SELECT Query but not UPDATE 【发布时间】:2012-01-01 21:30:05 【问题描述】:

我一直在 SELECT 查询中使用 IF() 作为:

  SELECT
    IF(p.A=value,p.B,p.C) AS photo
FROM prof p
WHERE...

但是当我使用 UPDATE 和 IF() 这样的 SQL 似乎不起作用时,不能在 UPDATE 查询中使用 If() 是否正常?

UPDATE table
SET IF(p.A=value,p.B,p.C) = value2
WHERE...

【问题讨论】:

【参考方案1】:

我认为你可以重新设计逻辑

p.B = if(p.A=$value, $value2, p.B), // set B=$value2 is p.A=$value
p.C = if(p.A=$value, p.C, $value2)  // set C=$value2 where p.A<>$value

【讨论】:

【参考方案2】:

你需要像这样使用 CASE....WHEN...THEN

UPDATE table

设置 p.A = ( 案子 什么时候 (p.A==值) 然后 价值2 别的 价值3 结尾 ) 在哪里 ......

OR you need to go here

【讨论】:

【参考方案3】:
UPDATE 
    table
SET
    value2 = (SELECT IF(p.A=value,p.B,p.C) AS photo FROM prof p WHERE table.id=...)

仅限 mysql 4.1+

【讨论】:

【参考方案4】:

您不能分配 IF 表达式的结果,因为它不直接存储在表中。 update 语句期望集合表达式的左侧是列名。

【讨论】:

以上是关于可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用的主要内容,如果未能解决你的问题,请参考以下文章

在 ABAP 中使用一个或多个 IF 语句的 SELECT 查询

Impala 可以从表中执行 COUNT(*) 但不能执行 SELECT *

在 MySQL SELECT 查询中使用 IF 语句

resultmap中select的查询不能用动态sql

Select Query SQL Server 中的 IF 子句用法

如果在sql postgresql中存在,如何使用