MySQL: Ustaw zmienną użytkownika na podstawie zapytania

195

Czy możliwe jest ustawienie zmiennej użytkownika na podstawie wyniku zapytania w MySQL?

Co chcę osiągnąć jest coś takiego (możemy założyć, że oba USERi GROUPsą unikalne):

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

Pamiętaj, że wiem, że to możliwe, ale nie chcę tego robić za pomocą zagnieżdżonych zapytań.

Avada Kedavra
źródło

Odpowiedzi:

330

Tak, ale musisz przenieść przypisanie zmiennej do zapytania:

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

Przypadek testowy:

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

Wynik:

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)

Zauważ, że dla SET, albo =albo :=może być użyte jako operator przypisania. Jednak wewnątrz innych instrukcji operator przypisania musi być, :=a nie =dlatego, że =jest traktowany jako operator porównania w instrukcjach innych niż SET.


AKTUALIZACJA:

Po komentarzach poniżej możesz także wykonać następujące czynności:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
Daniel Vassallo
źródło
3
A tak przy okazji, czy możesz zignorować dane wyjściowe pierwszej instrukcji (jako jedyne przypisanie zmiennej) i wyświetlić tylko dane wyjściowe drugiego zapytania?
Avada Kedavra
3
@Avada: Zaktualizowałem moją odpowiedź o alternatywę, która nie daje wyniku dla przypisania zmiennej.
Daniel Vassallo,
1
@DanielVassallo, Tam też jest select grop into @group from user limit 1.
Pacerier
@DanielVassallo bardzo dziękuję. Stwierdzenie „INTO” jest bardzo pomocne. Szukałem ustawienia mysql var od select bez zwracania select. DZIĘKI!
Luis Antonio Pestana,
68

Po prostu dodaj nawias wokół zapytania:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;
Sdz
źródło
To Subquery returns more than 1 rowdla mnie
skutkuje
1
@timbroder Wystarczy dodać LIMIT 1 do zapytania. W każdym razie zasugerowałem edycję, aby to poprawić.
Youkko
11

Najpierw przyjrzyjmy się, jak możemy zdefiniować zmienną w mysql

Aby zdefiniować zmienną w mysql, powinna zaczynać się od „@” jak @ {nazwa_zmiennej}, a ta „{nazwa_zmiennej}”, możemy zastąpić ją naszą nazwą zmiennej.

Teraz, jak przypisać wartość do zmiennej w mysql. W tym celu mamy wiele sposobów

  1. Używając słowa kluczowego „SET”.

Przykład: - mysql> SET @a = 1;

  1. Bez użycia słowa kluczowego „SET” i użycia „: =”.

Przykład: - mysql> @a: = 1;

  1. Za pomocą instrukcji „SELECT”.

Przykład: - mysql> wybierz 1 na @a;

Tutaj @a jest zmienną zdefiniowaną przez użytkownika, a 1 będzie przypisana w @a.

Teraz, jak uzyskać lub wybrać wartość @ {nazwa_zmiennej}.

możemy użyć instrukcji select podobnej do

Przykład: -

mysql> select @a;

pokaże wynik i wartość @a.

Teraz, jak przypisać wartość z tabeli w zmiennej.

W tym celu możemy użyć dwóch instrukcji, takich jak:

  1. @a: = (wybierz emp_name od pracownika, gdzie emp_id = 1);

  2. wybierz emp_name na @a od pracownika, gdzie emp_id = 1;

Zawsze bądź ostrożny nazwa_imienna musi zwrócić jedną wartość, w przeciwnym razie spowoduje to błąd w instrukcjach tego typu.

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

dilraj singh
źródło
7

Użyj tego sposobu, aby wynik nie był wyświetlany podczas uruchamiania procedury składowanej.

Zapytanie:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
Rupam
źródło