MySQL: Sorgu sonucundan kullanıcı değişkenini ayarla


198

MySQL'deki bir sorgunun sonucuna göre bir kullanıcı değişkeni ayarlamak mümkün müdür?

Ne elde etmek istiyorum böyle bir şeydir (biz her ikisi de varsayabilir USERve GROUPbenzersiz):

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

Mümkün olduğunu biliyorum ancak bunu iç içe sorgularla yapmak istemiyorum.

Yanıtlar:


334

Evet, ancak değişken atamasını sorguya taşımanız gerekir:

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

Test durumu:

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

Sonuç:

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)

İçin Not SETya =veya :=atama operatörü olarak kullanılabilir. Ancak diğer tablolar içinde atama operatörü olmalı :=değil =çünkü =olmayan SET tablolara bir karşılaştırma operatörü olarak tedavi edilir.


GÜNCELLEME:

Aşağıdaki yorumlara ek olarak, aşağıdakileri de yapabilirsiniz:

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

3
Btw, ilk ifadenin çıktısını (tek değişken ataması olarak) bastırabilir ve yalnızca ikinci sorgunun çıktısını gösterebilir misiniz?
Avada Kedavra

3
@Avada: Yanıtımı değişken ataması için bir sonuç vermeyen bir alternatifle güncelledi.
Daniel Vassallo

1
@DanielVassallo, Ayrıca var select grop into @group from user limit 1.
Pacerier

@DanielVassallo çok teşekkür ederim. "INTO" ifadesi çok yardımcıdır. Seçimi döndürmeden seçimden mysql var ayarını arıyordum. TEŞEKKÜRLER!
Luis Antonio Pestana

68

Sorgunun etrafına parantez eklemeniz yeterlidir:

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

Bu Subquery returns more than 1 rowbenim için sonuç
timbroder

1
@timbroder Sadece sorguya LIMIT 1 ekleyin. Her neyse, bunu düzeltmek için bir düzenleme önerdim.
Youkko

12

Önce mysql'de bir değişkeni nasıl tanımlayabileceğimize bir göz atalım

Mysql'de bir değişken tanımlamak için, @ {değişken_adı} ve bu '{değişken_adı}' gibi '@' ile başlamalı, bunu değişken ismimizle değiştirebiliriz.

Şimdi, mysql değişkeninde bir değer atama. Bunun için bunu yapmanın birçok yolu var

  1. 'SET' anahtar kelimesini kullanma.

Misal :-

mysql >  SET @a = 1;
  1. 'SET' anahtar kelimesini kullanmadan ve ': =' kullanmadan.

Misal:-

mysql > @a:=1;
  1. 'SELECT' ifadesini kullanarak.

Misal:-

mysql > select 1 into @a;

Burada @a kullanıcı tanımlı bir değişkendir ve 1 @a içinde atanacaktır.

Şimdi @ {değişken_adı} değerinin nasıl alınacağı veya seçileceği.

select deyimini aşağıdaki gibi kullanabiliriz

Misal :-

mysql > select @a;

çıktıyı gösterecek ve @a değerini gösterecektir.

Şimdi bir değişkende tablodan bir değer atama.

Bunun için aşağıdaki gibi iki ifade kullanabiliriz:

1.

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

Her zaman dikkatli olun emp_name tek bir değer döndürmelidir, aksi takdirde bu tür ifadelerde size bir hata verecektir.

buna bakın: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


7

Saklı yordam çalıştırılırken sonuç görüntülenmeyecek şekilde bu yolu kullanın .

Sorgu:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.