检查语法错误:update T set flargess = (case when coalesce(销售赠品,'')='' then flargess else 销售赠品) from ic_general_b T, ( select 销售子.blargessflag as 销售赠品, 出库子.cgeneralbid from so_saleorder_b 销售子 right join ic_general_b 出库子 on 销售子.corder_bid = 出库子.cfirstbillbid where coalesce(销售子.blargessflag, 'N') <> 'N' ) D where T.cgeneralbid = D.cgeneralbid
时间: 2024-01-11 07:02:27 浏览: 28
该 SQL 语句存在语法错误,正确的语句应该是:
```sql
UPDATE ic_general_b T
SET flargess = CASE WHEN COALESCE(销售赠品,'')='' THEN flargess ELSE 销售赠品 END
FROM (
SELECT 销售子.blargessflag as 销售赠品, 出库子.cgeneralbid
FROM so_saleorder_b 销售子
RIGHT JOIN ic_general_b 出库子
ON 销售子.corder_bid = 出库子.cfirstbillbid
WHERE COALESCE(销售子.blargessflag, 'N') <> 'N'
) D
WHERE T.cgeneralbid = D.cgeneralbid;
```
这个 SQL 语句使用了 UPDATE WITH JOIN 语法来更新 `ic_general_b` 表中的 `flargess` 字段,其中使用了一个内部查询来获取需要更新的数据,然后通过 `WHERE` 子句来指定更新的条件。在内部查询中使用了 `COALESCE` 函数来处理可能存在的空值,使用了 `RIGHT JOIN` 来保留 `so_saleorder_b` 表中的空值。
相关问题
case when rr_store_succ.store_succ is null then '否' when rr_store_succ.store_succ=0 then '否' else '是' end 出现“?”是什么原因
这种情况可能是因为 rr_store_succ.store_succ 列中存在 NULL 值,导致 CASE 表达式无法判断该返回哪个结果。在这种情况下,可以考虑使用 COALESCE 函数或者 IS NULL 条件来处理 NULL 值,例如:
1. 使用 COALESCE 函数将 NULL 值替换为默认值:
```
CASE WHEN COALESCE(rr_store_succ.store_succ, 0) = 0 THEN '否' ELSE '是' END
```
2. 使用 IS NULL 条件来判断 NULL 值:
```
CASE WHEN rr_store_succ.store_succ IS NULL THEN '否' WHEN rr_store_succ.store_succ = 0 THEN '否' ELSE '是' END
```
通过这些方法,可以避免出现无法判断的情况,保证 CASE 表达式的正确性。
select * from t_googlenutrareport where remarks LIKE CASE WHEN :#{#ads.searchcontent} IS NULL THEN remarks ELSE CONCAT('%', :#{#ads.searchcontent}, '%') END,operation_id = CASE WHEN :#{#ads.operationman} IS NULL OR :#{#ads.operationman} = '' THEN operation_id ELSE :#{#ads.operationman} END这个sql那里有问题
这个 SQL 语句可能有问题,因为 CASE 语句的返回值必须是单一值,而这里的两个 CASE 语句返回的是不同类型的值。其中第一个 CASE 语句返回的是一个字符串,第二个 CASE 语句返回的是一个条件表达式。此外,第一个 CASE 语句中的 ELSE 子句似乎也有问题,应该返回一个空字符串而不是原始的 remarks 字段。下面是一个可能的修正版本:
```
SELECT *
FROM t_googlenutrareport
WHERE remarks LIKE CONCAT('%', COALESCE(:#{#ads.searchcontent}, ''), '%')
AND (COALESCE(:#{#ads.operationman}, '') = '' OR operation_id = :#{#ads.operationman})
```
这个版本中使用了 COALESCE 函数来避免 NULL 值引起的问题,同时将两个条件分别放在 WHERE 子句中,避免了 CASE 语句的使用。