首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IF语句MYSQL更新列

问用IF语句MYSQL更新列
EN

Stack Overflow用户
提问于 2015-04-21 16:28:02
回答 1查看 44关注 0票数 0

在纯MYSQL中,这可能是完全不可能的,但希望有人能给我们一些启示。

基本上,我正在尝试创建一个计划,它将在一个表上进行测试,并更新一个新的表,或者清除或未清除。

以下是表-测试件的快照

代码语言:javascript
复制
TEST_NO RING ROUTE  TYPE_NO
7256    BT1 TSTS    390397
7257    BT1 TCRT    390397
7258    BT1 TCRT    390397
7259    BT1 TCRT    390397
7260    BT1 TCRT    390397
7261    BT1 TCRT    390397
7262    BT1 TCRT    390397
7263    BT1 TCRT    390397
7264    BT1 TCRT    390397
7265    BT1 TCRT    390397
7266    BT1 TCRT    390397
7267    BT1 TCRT    390418
7268    BT1 TCRT    390418
7269    BT1 TCRT    390418
7270    BT1 TCRT    390418
7271    BT1 TCRT    390418
7272    BT1 TCRT    390418
7273    BT1 TCRT    390418
7274    BT1 TCRT    390418
7275    BT1 TCRT    390418
7276    BT1 TCRT    390418
7277    BT1 TCRT    390418

我试图实现的是检查每个TYPE_NO的所有路由值,如果路由的所有值都是TCRT,那么这将是正确的,或者如果一个值是TSTS,其余的值是TCRT,那么这将是假的。

从表1中可以看到,TYPE_NO 390397未被清除,因为并非所有的路由值都是TCRT,其中一个仍然是TSTS。第二个type_no 390418有一个所有TCRT的路由,这意味着Type_no已被清除。

因此,我需要更新另一个名为TypeCleared的表,结果如下所示。

代码语言:javascript
复制
TYPE_NO   TYPE_CLEARED
390397    UNCLEARED
390418    CLEARED

因此,假设TypeCleared表中有一个包含单个Type_no的列,而Type_Cleared字段是空的。

我试过以下方法-

代码语言:javascript
复制
 UPDATE TYPECLEARED SET TYPECLEARED.TYPE_CLEARED = "CLEARED" WHERE TYPECLEARED.TYPE_NO = TESTPIECES.TYPE_NO AND ROUTE = "TCRT" ;

   UPDATE TYPECLEARED SET TYPECLEARED.TYPE_CLEARED = "UNCLEARED" WHERE TYPECLEARED.TYPE_NO = TESTPIECES.TYPE_NO AND ROUTE NOT IN ("TCRT");

这个sql使表看起来如下所示

代码语言:javascript
复制
 TYPE_NO   TYPE_CLEARED
 390397    UNCLEARED
 390397    CLEARED
 390418    CLEARED

因此,在这种情况下,我认为是否有某种方法可以使用用户定义的变量来创建IF Else语句。

代码语言:javascript
复制
SET @PIECES =  (SELECT count(test_no) from live_testpiec group by TYPE_NO);

SET @ROUTE =  (SELECT count(ROUTE) from live_testpiec WHERE ROUTING_POS = 'TCRT' group by TYPE_NO);

使用变量,我可以做一个评估,如果@ update = @ROUTE然后将该TYPE_NO更新为已清除,否则将未清除。

尽管,当我试图设置这些变量时,我得到了以下错误-

代码语言:javascript
复制
Subquery returns more than 1 row 

这意味着我不能在type_no上使用group by,但是这对于评估每一组TYPE_NO绝对是至关重要的。

做我想要达到的目标还有其他的方法吗?希望这有意义!

任何问题请问

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 17:31:05

http://sqlfiddle.com/#!9/f4af8/2

代码语言:javascript
复制
UPDATE TypeCleared
INNER JOIN (
 SELECT TYPE_NO, SUM(IF(ROUTE='TSTS',1,0)) as criteria
 FROM testpieces
 GROUP BY TYPE_NO
 ) t
ON  TypeCleared.TYPE_NO = t.TYPE_NO
SET TYPE_CLEARED = IF(t.criteria=0,'CLEARED','UNCLEARED')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29778020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档