2015-04-21 2 views
0

Это может быть совершенно невозможно в чистом MYSQL, но, надеюсь, кто-то может пролить некоторый свет.Обновление столбца с IF Statement MYSQL

В основном я пытаюсь создать расписание, которое будет выполнять тест на таблице и обновлять новую таблицу с помощью Очистить ИЛИ Не очищено.

Вот снимок таблицы - testpieces

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 

То, что я пытаюсь добиться, чтобы выполнить проверку всех значений ROUTE для каждого TYPE_NO и если все значения маршрута TCRT то это будет быть истинным, или если одно значение было TSTS, а остальные были TCRT, тогда это было бы ложным.

Из таблицы 1 видно, что TYPE_NO 390397 не очищается, потому что не все значения ROUTE являются TCRT, а все еще являются TSTS. Второй тип_no 390418 имеет ROUTE всех TCRT, это означает, что 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