MySQL: การเลือกหลายฟิลด์ให้เป็นตัวแปรหลายตัวในกระบวนงานที่เก็บไว้


106

ฉันสามารถเลือกหลายคอลัมน์ให้เป็นตัวแปรหลายตัวภายใน Select Query เดียวกันใน MySQL ได้หรือไม่

ตัวอย่างเช่น:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;

ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร?

คำตอบ:


220

ไวยากรณ์ของคุณไม่ถูกต้อง: คุณต้องแสดงรายการฟิลด์ตามลำดับก่อน INTO และตัวแปรเป้าหมายที่เกี่ยวข้องหลังจาก:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName

6
+1. นี่เป็นกรณีที่ไวยากรณ์ของ T-SQL ชัดเจนขึ้น การมีรายการเหล่านี้แยกจากกันทำให้เกิดปัญหาการบำรุงรักษาเช่นเดียวกับ DECLARE CURSOR และ FETCH (ไม่ใช่ว่าฉันเคยใช้สิ่งเหล่านี้)
harpo

เช่นเดียวกับ Pl / Sql เช่นกัน
Aniket Thakur

11

========== ให้คำแนะนำ ==========

@martin clayton คำตอบถูกต้อง แต่นี่เป็นคำแนะนำเท่านั้น

โปรดหลีกเลี่ยงการใช้ตัวแปรที่ไม่ชัดเจนในกระบวนงานที่เก็บไว้

ตัวอย่าง:

SELECT Id, dateCreated
INTO id, datecreated
FROM products
WHERE pName = iName

ตัวอย่างข้างต้นจะทำให้เกิดข้อผิดพลาด (ข้อผิดพลาดค่าว่าง)

ตัวอย่างให้ด้านล่างถูกต้อง ฉันหวังว่านี่จะสมเหตุสมผล

ตัวอย่าง:

SELECT Id, dateCreated
INTO val_id, val_datecreated
FROM products
WHERE pName = iName

คุณยังสามารถทำให้ไม่คลุมเครือโดยอ้างอิงตารางเช่น:

[เครดิต: maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName

คุณยังสามารถทำให้ไม่คลุมเครือได้โดยอ้างอิงตารางเช่นSELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

อีกทางเลือกหนึ่งสำหรับคำตอบของ Martin คุณสามารถเพิ่มส่วน INTO ที่ท้ายแบบสอบถามเพื่อให้การสืบค้นอ่านง่ายขึ้น:

SELECT Id, dateCreated FROM products INTO iId, dCreate

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