Heim > Fragen und Antworten > Hauptteil
Ich habe eine Tabelle namens „Mitarbeiter“. Der Tabellenerstellungscode lautet wie folgt:
create table employee(name varchar(50),ph_no varchar(10),e_id varchar(5),pay_scale varchar(5),year varchar(4));
Der Inhalt des Formulars ist wie folgt:
insert into employee(name,ph_no,pay_scale,year) values('AMIT','123456','PL-10','2019'); insert into employee(name,ph_no,pay_scale,year) values('AMIT','123456','PL-10','2020'); insert into employee(name,ph_no,pay_scale,year) values('AMIT','123456','PL-11','2021'); insert into employee(name,ph_no,pay_scale,year) values('AMIT','123456','PL-11','2022'); +------+--------+------+-----------+------+ | name | ph_no | e_id | pay_scale | year | +------+--------+------+-----------+------+ | AMIT | 123456 | NULL | PL-10 | 2019 | | AMIT | 123456 | NULL | PL-10 | 2020 | | AMIT | 123456 | NULL | PL-11 | 2021 | | AMIT | 123456 | NULL | PL-11 | 2022 | +------+--------+------+-----------+------+
Jetzt möchte ich „e_id“ aktualisieren. Zuerst wird geprüft, ob die gleiche e_id in der Tabelle vorhanden ist. Wenn sie nicht in der Tabelle enthalten ist, wird nur die Zeile mit der angegebenen e_id aktualisiert, andernfalls wird sie nicht aktualisiert. Meine Upgrade-Anfrage lautet also wie folgt:
update employee set e_id='0132' where concat_ws(',',name,ph_no,pay_scale)=concat_ws(',','AMIT','123456','PL-10') and not exists (select e_id from employee group by e_id having count(*)>=1);
Aber es wird der folgende Fehler ausgegeben:
Fehler 1093 (HY000): Sie können die zu aktualisierende Zieltabelle „employee“ nicht in der FROM-Klausel angeben Ich habe die folgende Abfrage versucht:
update employee set e_id='0132' where concat_ws(',',name,ph_no,pay_scale)=concat_ws(',','AMIT','123456','PL-10') and e_id not in (select e_id from (select e_id from employee group by e_id having count(*)>=1) as t);
Aber dadurch wird die Tabelle auch nicht aktualisiert und es werden die folgenden Ergebnisse angezeigt:
Query OK, 0 rows affected (0.01 sec) 匹配的行:0 更改:0 警告:0
Habe auch den folgenden Code ausprobiert:
update employee set employee.e_id='0132' where employee.e_id not in (select * from (select f.e_id from employee f inner join employee b on b.name=f.name and b.ph_no=f.ph_no and b.pay_scale=f.pay_scale) as tmp) and employee.name='AMIT' and employee.ph_no='123456' and employee.pay_scale='PL-10';
Aber dadurch wird die Tabelle auch nicht aktualisiert und es kommt zu folgendem Ergebnis: Abfrage OK, 0 Zeilen betroffen (0,00 Sekunden) Übereinstimmende Zeilen: 0 Änderungen: 0 Warnungen: 0 Bitte helfen Sie. Vielen Dank im Voraus.
P粉6046694142024-04-03 10:18:58
NULL
的播放方式与某些人期望的 NOT IN
不同:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=24c176ff4d4e2c52309aaca14cc121c5 因此,只需将 WHERE e_id IS NOT NULL
放在子中询问。另外,HAVING COUNT(*) >= 1
可以删除,因为它总是返回 1 或更多的值...
update employee set e_id='0132' where name = 'AMIT' and ph_no = '123456' and pay_scale = 'PL-10' and e_id not in (select e_id from (select distinct e_id from employee where e_id IS NOT NULL ) as t );
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2a0b036a7d1db9138e3ab29af3d346f8 一个>