2015-04-21 65 views
0

在纯粹的MYSQL中这可能是完全不可能的,但希望有人可以阐明一些看法。使用IF语句更新列MYSQL

基本上,我试图创建一个计划,将做一个表上的测试,并更新清理或未清除新表。

下面是表的快照 - 测试片

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,如果路径的所有值都ROUTE值的检查是TCRT那么这将是真的,或者如果一个单独的值是TSTS,其余的是TCRT,那么这将是错误的。

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

所以,我需要更新另一个表称为TypeCleared,并有结果类似如下..

TYPE_NO TYPE_CLEARED 
390397 UNCLEARED 
390418 CLEARED 

因此,可以说TypeCleared表中有一栏全单Type_no和Type_Cleared场是空白的。

我尝试以下 -

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取得了表这个样子的

TYPE_NO TYPE_CLEARED 
390397 UNCLEARED 
390397 CLEARED 
390418 CLEARED 

所以混不下去就这样,我觉得是有某种类型的方法来创建一个的if else语句使用用户定义的变量。

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); 

随着变量我可以做一个评估,如果@PIECES = @ROUTE然后散去,其他未清除更新TYPE_NO。

虽然,当我尝试设置这些变量,我碰到下面的错误 -

Subquery returns more than 1 row 

含义我不能在type_no使用组,但是这绝对是至关重要的,以评估各组TYPE_NO的。

是否有任何其他的方式来做我想要实现的目标..希望这是有道理的!

任何疑问,请向

回答

3

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

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') 
+0

完美工作,非常感谢! – SK2017