2012-12-06 2 views
9

큰 MySQL 데이터베이스에 읽기 권한 만 있으면 쿼리 할 때 느린 쿼리 결과를 'foo'변수로 설정하여 다른 쿼리에서 다시 사용할 수 있습니다. .MySQL 변수에 쿼리 결과 할당

기본적으로 성가신 하위 쿼리에 대한 변수가 필요하므로이를 사용할 때마다 실행 비용을 들이지 않고 재사용 할 수 있습니다. ERROR 1241 (21000) : 피연산자가 1 열 (들)을 포함해야하며, 내가 한 열을 제한 할 경우, ERROR 1242 (21000) :

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

내가 얻을 :

내가 입력 할 때 하위 쿼리는 더 리턴 1 행보다

변수에 배열이나 테이블을 저장할 수있는 방법이 있습니까? 임시 테이블을 만들 수있는 권한이 없습니다.

답변

4

MySQL에서 작업 할 때는 @이어야합니다. 어떤 변수에

당신 캔트 가게 전체 테이블을하지만 당신은 쿼리 아래에 사용하는 변수에 컬럼 데이터를 저장할 수 있습니다 :

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

감사합니다,하지만 지금은 얻을 : ERROR 1241 (21000) : 피연산자 1 열 (들)을 포함해야합니다. 1 열로 제한하면 하위 쿼리가 1 행 이상을 반환합니다. – 5un5

+0

예.'@ foo'는 하나의 값만 저장할 수 있기 때문에 가능합니다. 그래서 당신의'SELECT' 문에서 여러분은 그것이 단일 값을 리턴한다는 것을 확실히 알아야합니다. –

+0

아아, 알 겠어. 감사. 변수를 쿼리 결과의 테이블 또는 임대 배열 가치를 저장할 수있는 방법이 있나요? – 5un5

1

당신이 시도 할 수 있습니다.

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

또는

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

고마워요.이 작업을하기에는 너무 많은 데이터가 있지만 어쩌면 작은 작업 일 수도 있습니다. – 5un5

+0

도움이되지만 여전히 오류가 발생합니다. 1172 (42000) : 결과를 하나 이상의 행으로 구성했을 때 : SELECT pid INTO @foo table1 조인 테이블 2 bar = 0 group by pid – 5un5

+0

get group_concat function 모든 대답은 이미 내 대답에 정의 된 것처럼 하나의 변수에 데이터를 저장합니다. –