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.

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;

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 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;

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


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;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.