2015-04-21 91 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