หากมีอยู่แล้วปรับปรุงอื่นแทรก


14

ฉันพยายามที่จะสร้างSTORED PROCEDUREที่จะนำมาใช้ในตารางที่เรียกว่าUPDATE machineตารางนี้มีคอลัมน์ที่สาม ( machine_id, machine_nameและreg_id)

ในตารางข้างต้นreg_id( INT) machine_idเป็นคอลัมน์ที่มีค่าสามารถเปลี่ยนแปลงได้สำหรับ

ฉันต้องการกำหนดQUERY/ PROCEDUREเพื่อตรวจสอบว่ามีreg_idอยู่แล้วในตารางนั้น หากเป็นเช่นนั้นแสดงUPDATEว่าแถวนั้นมิฉะนั้นINSERTเป็นแถวใหม่

ใครบางคนได้โปรดช่วยให้ผมเขียนว่าQUERY/ PROCEDURE?

คำตอบ:


12

หวังว่าสิ่งนี้จะช่วยให้ทำซ้ำอัปเดต KEY

create table machine(
  machine_id int not null primary key,
  machine_name varchar(50),
  reg_id int
);

insert into machine (machine_id, machine_name, reg_id)
values(1, 'my_machine', 1);

INSERT INTO machine (reg_id, machine_id, machine_name) VALUES (1, 1, 'test_machine')
  ON DUPLICATE KEY UPDATE machine_name=VALUES(machine_name);

ทำงานกับSQL Fiddle


พวกเขาอาจต้องการreg_id = VALUES(reg_id)เช่นกัน
ypercubeᵀᴹ

ถ้าเรามีสองเงื่อนไขในการสืบค้นฉันหมายถึงไม่เพียง แต่กุญแจนั้นไม่ซ้ำกัน?
Sam

11

ปัญหาเดียวก็คือคุณไม่สามารถใช้มันได้เหมือนแบบสอบถามทั่วไป โครงสร้างการควบคุมเช่นIFหรือในขณะที่ได้รับอนุญาตเฉพาะในขั้นตอนการจัดเก็บหรือฟังก์ชั่น

เพียงสร้างขั้นตอนดังนี้:

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
end $$
delimiter ;

และเรียกมันว่าสิ่งนี้:

call select_or_insert();

และเสร็จสิ้น


1
สวัสดี @Taz คุณสามารถตรวจสอบคำตอบที่คุณไปด้วยได้หรือไม่?
Craig Efrein

@Craig Efrein สวัสดี ฉันไปกับคนแรก ตอบของคุณ ขอบคุณอีกครั้ง.
Taz

@Taz ฉันดีใจที่ข้อมูลนี้มีประโยชน์โปรดถ้าคำตอบนี้สามารถลบข้อสงสัยของคุณดำเนินการต่อเพื่อปิดคำถาม
Bill N. Varelli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.