MySQL: ตั้งค่าตัวแปรผู้ใช้จากผลการสืบค้น


198

เป็นไปได้หรือไม่ที่จะตั้งค่าตัวแปรผู้ใช้ตามผลลัพธ์ของแบบสอบถามใน MySQL?

สิ่งที่ฉันต้องการบรรลุคืออะไรเช่นนี้ (เราสามารถสรุปได้ว่าทั้งสองUSERและGROUPไม่เหมือนใคร):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

โปรดทราบว่าฉันรู้ว่าเป็นไปได้ แต่ฉันไม่ต้องการทำสิ่งนี้ด้วยข้อความค้นหาซ้อน

คำตอบ:


334

ใช่ แต่คุณต้องย้ายการกำหนดตัวแปรไปยังแบบสอบถาม:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

กรณีทดสอบ:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

ผลลัพธ์:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

โปรดทราบว่าสำหรับSETทั้ง=หรือ:=สามารถนำมาใช้เป็นผู้ประกอบการที่ได้รับมอบหมาย อย่างไรก็ตามในงบอื่น ๆ ผู้ประกอบการที่ได้รับมอบหมายจะต้องเป็น:=และไม่ได้=เพราะ=ถือเป็นตัวดำเนินการเปรียบเทียบในคำสั่งที่ไม่ใช่ตลาดหลักทรัพย์


UPDATE:

นอกเหนือจากความคิดเห็นด้านล่างคุณสามารถทำสิ่งต่อไปนี้:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;

3
Btw คุณสามารถระงับเอาท์พุทของคำสั่งแรก (เป็นเพียงการมอบหมายตัวแปร) และแสดงเฉพาะผลลัพธ์ของเคียวรีที่สองได้หรือไม่
Avada Kedavra

3
@Avada: อัปเดตคำตอบของฉันด้วยทางเลือกซึ่งจะไม่แสดงผลลัพธ์สำหรับการกำหนดตัวแปร
Daniel Vassallo

1
@DanielVassallo, select grop into @group from user limit 1นอกจากนี้ยังมี
Pacerier

@DanielVassallo ขอบคุณมาก มาตรา "INTO" มีประโยชน์มาก ฉันกำลังมองหาการตั้งค่า mysql var จาก select โดยไม่ส่งคืน select ขอขอบคุณ!
Luis Antonio Pestana

68

เพียงเพิ่มวงเล็บรอบ ๆ เคียวรี:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;

ผลลัพธ์นี้Subquery returns more than 1 rowสำหรับฉัน
timbroder

1
@timbroder เพียงเพิ่ม LIMIT 1 ไปยังแบบสอบถาม อย่างไรก็ตามฉันแนะนำให้แก้ไขเพื่อแก้ไข
Youkko

12

ก่อนอื่นให้ดูที่วิธีที่เราสามารถกำหนดตัวแปรใน mysql

ในการกำหนด varible ใน mysql ควรเริ่มต้นด้วย '@' เช่น @ {variable_name} และสิ่งนี้ '{variable_name}' เราสามารถแทนที่มันด้วยชื่อตัวแปรของเรา

ตอนนี้วิธีการกำหนดค่าในตัวแปรใน mysql สำหรับสิ่งนี้เรามีหลายวิธีที่จะทำเช่นนั้น

  1. ใช้คำสำคัญ 'SET'

ตัวอย่าง: -

mysql >  SET @a = 1;
  1. โดยไม่ใช้คำหลัก 'SET' และใช้ ': ='

ตัวอย่าง:-

mysql > @a:=1;
  1. โดยใช้คำสั่ง 'SELECT'

ตัวอย่าง:-

mysql > select 1 into @a;

ที่นี่ @ a เป็นตัวแปรที่ผู้ใช้กำหนดและ 1 จะได้รับมอบหมายใน @a

ตอนนี้วิธีการรับหรือเลือกค่าของ @ {variable_name}

เราสามารถใช้คำสั่งเลือกเช่น

ตัวอย่าง: -

mysql > select @a;

มันจะแสดงผลลัพธ์และแสดงค่าของ @

ตอนนี้วิธีการกำหนดค่าจากตารางในตัวแปร

สำหรับเรื่องนี้เราสามารถใช้สองคำสั่งเช่น: -

1

@a := (select emp_name from employee where emp_id = 1);
select emp_name into @a from employee where emp_id = 1;

ต้องระวัง emp_name ต้องส่งคืนค่าเดียวมิฉะนั้นจะทำให้เกิดข้อผิดพลาดในข้อความสั่งประเภทนี้

อ้างอิงสิ่งนี้: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


7

ใช้วิธีนี้เพื่อไม่ให้ผลลัพธ์ปรากฏขึ้นขณะเรียกใช้กระบวนงานที่เก็บไว้

แบบสอบถาม:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.