Это может быть совершенно невозможно в чистом MYSQL, но, надеюсь, кто-то может пролить свет.
В основном я пытаюсь создать расписание, которое проведет тест на таблице и обновит новую таблицу с помощью Cleared OR Uncleared.
Вот снимок таблицы - тестовые образцы
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, и если все значения ROUTE равны TCRT, то это будет правдой, или если бы одно единственное значение было TSTS, а остальные были TCRT, то это было бы ложью.
Из таблицы 1 видно, что TYPE_NO 390397 не очищен, потому что не все значения ROUTE являются TCRT, одно по-прежнему TSTS. Второй type_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 как Cleared, иначе Uncleared.
Хотя, когда я пытаюсь установить эти переменные, я получаю следующую ошибку:
Subquery returns more than 1 row
Это означает, что я не могу использовать group by для type_no, но это абсолютно необходимо для оценки каждой группы TYPE_NO.
Есть ли другой способ сделать то, чего я пытаюсь достичь... надеюсь, это имеет смысл!
Если есть вопросы, задавайте