วิธีการจัดเก็บ Query Result ในตัวแปรโดยใช้ mysql


92
SET @v1 := SELECT COUNT(*) FROM user_rating;
SELECT @v1

เมื่อฉันเรียกใช้แบบสอบถามนี้ด้วยsetตัวแปรข้อผิดพลาดนี้จะปรากฏขึ้น

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT count(*) FROM user_rating' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(1 row(s) returned)
Execution Time : 00:00:00:343
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:343

คำตอบ:


149

ล้อมรอบที่เลือกด้วยวงเล็บ

SET @v1 := (SELECT COUNT(*) FROM user_rating);
SELECT @v1;

12
แบบสอบถามย่อยนั้นควรมี 1 แถวและ 1 คอลัมน์หรือไม่ 1. #1242 - Subquery returns more than 1 row , 2.#1241 - Operand should contain 1 column(s)
Shafizadeh

1
@RajatGupta: คุณกำลังเรียกใช้มันอยู่ที่ไหน? และกำหนด "ไม่ทำงาน"
Sergio Tulentsev

3
@Shafizadeh: ใช่แล้วการสืบค้นย่อยนั้นควรส่งคืนเพียงแถวเดียวและคอลัมน์
Sergio Tulentsev

1
@ แบล็ค: บางทีคำตอบอื่น ๆ ก็ใช้ได้
Sergio Tulentsev

2
ดูเหมือนว่าค่าที่ส่งคืนจะต้องเป็นหนึ่งไม่ใช่รายการของค่า
Victor S

35

นอกจากนี้หากคุณต้องการที่จะตั้งค่าตัวแปรหลายในแบบสอบถามครั้งโดยหนึ่งคุณสามารถใช้ไวยากรณ์อื่น ๆ SELECT @varname:=valueสำหรับการตั้งค่าตัวแปรที่ไปเช่นนี้

ตัวอย่างที่ใช้ได้จริง:

SELECT @total_count:=COUNT(*), @total_price:=SUM(quantity*price) FROM items ...

8

ใช้สิ่งนี้

 SELECT weight INTO @x FROM p_status where tcount=['value'] LIMIT 1;

ทดสอบแล้วใช้ได้ผลดี ...


วงเล็บ[]หมายถึงอะไรในข้อความนี้
amin

ไม่มีอะไรเป็นเพียงตัวยึดตำแหน่งข้าม [] และใส่ค่าของคุณในเครื่องหมายคำพูดเดียว
Aman Maurya

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