MySQL: Setel variabel pengguna dari hasil kueri

196

Apakah mungkin untuk menetapkan variabel pengguna berdasarkan hasil kueri di MySQL?

Apa yang saya ingin capai adalah sesuatu seperti ini (kita bisa berasumsi bahwa kedua USERdan GROUPunik):

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

Harap perhatikan bahwa saya tahu ini mungkin, tetapi saya tidak ingin melakukan ini dengan pertanyaan bersarang.

Avada Kedavra
sumber

Jawaban:

332

Ya, tetapi Anda harus memindahkan penugasan variabel ke dalam kueri:

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

Kasus cobaan:

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

Hasil:

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)

Perhatikan bahwa untuk SET, baik =atau :=dapat digunakan sebagai operator penugasan. Namun di dalam pernyataan lain, operator penugasan harus :=dan bukan =karena =diperlakukan sebagai operator pembanding dalam pernyataan non-SET.


MEMPERBARUI:

Selanjutnya komentar di bawah ini, Anda juga dapat melakukan hal berikut:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
Daniel Vassallo
sumber
3
Btw, bisakah Anda menekan output dari pernyataan pertama (sebagai satu-satunya penugasan variabelnya) dan hanya menampilkan output dari query kedua?
Avada Kedavra
3
@ Avada: Memperbarui jawaban saya dengan alternatif, yang tidak menampilkan hasil untuk penugasan variabel.
Daniel Vassallo
1
@DanielVassallo, Ada juga select grop into @group from user limit 1.
Pacerier
@DanielVassallo terima kasih banyak. Statemen "INTO" sangat membantu. Saya sedang mencari pengaturan mysql var dari pilih tanpa mengembalikan pilih. TERIMA KASIH!
Luis Antonio Pestana
68

Cukup tambahkan tanda kurung di sekitar kueri:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;
Sdz
sumber
Ini menghasilkan Subquery returns more than 1 rowbagi saya
timbroder
1
@timbroder Cukup tambahkan LIMIT 1 ke kueri. Lagi pula, saya menyarankan edit untuk memperbaikinya.
Youkko
12

Pertama mari kita lihat bagaimana kita mendefinisikan variabel di mysql

Untuk mendefinisikan sebuah variabel di mysql, ia harus dimulai dengan '@' seperti @ {variabel_name} dan ini '{variabel_name}', kita bisa menggantinya dengan nama variabel kita.

Sekarang, bagaimana menetapkan nilai dalam variabel di mysql. Untuk ini kami memiliki banyak cara untuk melakukan itu

  1. Menggunakan kata kunci 'SET'.

Contoh: - mysql> SET @a = 1;

  1. Tanpa menggunakan kata kunci 'SET' dan menggunakan ': ='.

Contoh: - mysql> @a: = 1;

  1. Dengan menggunakan pernyataan 'SELECT'.

Contoh: - mysql> pilih 1 ke @a;

Di sini @a adalah variabel yang ditentukan pengguna dan 1 akan ditugaskan di @a.

Sekarang cara mendapatkan atau memilih nilai @ {variable_name}.

kita bisa menggunakan pernyataan select like

Contoh: -

mysql> pilih @a;

itu akan menampilkan output dan menunjukkan nilai @a.

Sekarang bagaimana menetapkan nilai dari tabel dalam suatu variabel.

Untuk ini kita dapat menggunakan dua pernyataan seperti: -

  1. @a: = (pilih emp_name dari karyawan mana emp_id = 1);

  2. pilih emp_name ke @a dari karyawan mana emp_id = 1;

Berhati-hatilah selalu emp_name harus mengembalikan nilai tunggal jika tidak akan membuat Anda kesalahan dalam pernyataan jenis ini.

lihat ini: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql

dilraj singh
sumber
7

Gunakan cara ini sehingga hasilnya tidak akan ditampilkan saat menjalankan prosedur tersimpan.

Kueri:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
Rupam
sumber