У меня есть таблица 'list', как это
Unique|S_Number|New_Attr|C_Number|C_Order|A_Number
123 101 1 -A 1 0
124 101 1 -A 1 2
125 101 1 -A 1 3
127 101 1 -B 2 4
128 101 1 -C 3 5
129 101 1 -D 4 6
У меня есть это так
Unique|S_Number|New_Attr|C_Number|C_Order|A_Number
123 101 1 -A 1 0
124 101 2 -A 1 2
125 101 3 -A 1 3
127 101 1 -B 2 4
128 101 1 -C 3 5
129 101 1 -D 4 6
означает, что хотите обновить New_Attr со значением A_Number, только когда есть комбинацияS_Number и C_Number больше 1, а A_Number больше 0
Я создал временную таблицу list_temp2 для вставки только
CREATE TABLE list_temp2
(
S_number CHAR(32) NOT NULL,
C_number CHAR(32),
CNT integer
);
INSERT INTO list_temp2 p2 (p2.s_number, p2.c_number, p2.cnt)
SELECT p1.S_number, p1.C_number,COUNT(*) FROM list p1
GROUP BY p1.S_number, p1.C_number
HAVING COUNT(*)>1;
Вставляет одну строку
101 -A 3
SELECT p1.s_number, p1.c_number, p1.New_Attr, p1.a_number, p2.cnt FROM list p1
LEFT JOIN
list_temp2 p2 ON p1.s_number = p2.s_number
where p1.a_number>1 AND p2.cnt>1 AND p2.s_number = p1.s_number AND p2.c_number = p1.c_number;
Дает 2 строки (ожидается)
101 -A 1 2 3
101 -A 1 3 3
Теперь я обновляю таблицу списка, но я не могу сделать это правильно, если я делаю так:
UPDATE list p1 SET p1.New_Attr=
(
SELECT p1.a_number FROM list p1
LEFT JOIN
list_temp2 p2 ON p1.s_number = p2.s_number
where p1.a_number>0 AND p2.cnt>1 AND p2.s_number = p1.s_number AND p2.c_number = p1.number
);
Этовыводит слишком много значений, так как команда Select дает 2 строки