2012-12-06 22 views
9

Pytam o dużą bazę danych mysql z tylko uprawnieniami do odczytu i chciałbym ustawić kilka powolnych wyników kwerendy na zmienną "foo", aby móc ich używać ponownie w innych kwerendach .Przypisywanie wyników zapytania do zmiennej MySQL

Zasadniczo chcę mieć zmienną dla niewygodnego podkwerendy, więc mogę go ponownie używać bez kosztów jego uruchomienia za każdym razem, gdy chcę go użyć.

kiedy wchodzi:

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 

uzyskać: Błąd 1241 (21000) Argument powinien zawierać 1 kolumnę (-y) i jeśli ograniczenia do 1 kolumnie ERROR 1242 (21000) Podkwerenda zwraca więcej niż 1 wiersz

Czy istnieje sposób na zapisanie tablicy lub tabeli w zmiennej? Nie mam uprawnień do tworzenia tabel tymczasowych.

Odpowiedz

4

to powinno być @, gdy robisz w MySQL.

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 
+0

Dzięki, ale teraz otrzymuję: ERROR 1241 (21000): Argument powinien zawierać 1 kolumnę (-y). Kiedy ograniczam go do 1 kolumny, otrzymuję: Podzapytowanie zwraca więcej niż 1 wiersz. – 5un5

+0

tak, ponieważ '@ foo' może przechowywać tylko jedną wartość. więc w twoim poleceniu "SELECT" powinieneś wiedzieć, że zwróci pojedynczą wartość. –

+0

Ach, rozumiem. Dzięki. Czy istnieje sposób na przechowywanie tabeli lub dzierżawy tablicy wartości wyników zapytania w zmiennej? – 5un5

1

Możesz też spróbować:

cant sklepu pełną tabelę w dowolnej zmiennej, ale można przechowywać dane kolumn w dowolnej zmiennej za pomocą poniższego zapytania.

SELECT GROUP_CONCAT(col1 SEPARATOR '~~~'), GROUP_CONCAT(col2 SEPARATOR '~~~'), ... INTO @foo, @foo2, ... 
FROM table1 JOIN table2 
WHERE bar = 0 
GROUP BY id; 

lub

select col1, col2, ... into @foo, @foo2, ... 
from table1 join table2 
where bar = 0 
group by id 
+0

Dzięki - za dużo danych, aby ten działał, ale może dla mniejszego zadania. – 5un5

+0

Byłoby pomocne, ale nadal dostaję ERROR 1172 (42000): Wynik składał się z więcej niż jednego wiersza, gdy próbuję go z: SELECT pid INTO @ tabela1 join tabela 2 słupek = 0 grupa przez pid – 5un5

+0

Wypróbuj funkcję group_concat, aby uzyskać wszystkie wiersze danych w jednej zmiennej, jak już zdefiniowałem w mojej odpowiedzi. –

Powiązane problemy