2013-03-25 1 views
0

쿼리를 위해 한 번에 3 개의 테이블을 선택하려고합니다. 각 테이블에 대해 반환되는 행 수를 결정하는 가장 좋은 방법은 무엇입니까? 나는 이런 식으로한다면 이렇게테이블 당 MySQL 다중 SELECT 문 계산 결과가 반환되었습니다.

개별적으로, 나는 각각의 많은 행이 반환되는 방식을 선택할에 내가 볼 수있는,

SELECT * from tableA 
SELECT * from tableB 
SELECT * from tableC 

있습니다. 한 번에이 모든 것을 성공적으로 선택하고 싶습니다. 그러나 반환 된 테이블 당 결과를 선택하는 방법을 알고 싶습니다. 아래의 검색어 예 :

SELECT * from tableA ta WHERE id=100 
SELECT * from tableB tb where pid=100 
SELECT * from tableC tc where cid = 100 

이 문제가 발생합니까?

SELECT (count(id) from tableA where id=100) as count_tableA, 
SELECT * from tableA ta WHERE id=100,  
SELECT (count(pid) from tableB where id=100) as count_tableB, 
SELECT * from tableB tb where pid=100, 
SELECT (count(id) from tableB where cid=100) as count_tableC, 
SELECT * from tableC tc where cid = 100 

전반적인 목표는 3 개 쿼리마다 피함으로써 성능을 향상하는 것이지만, 그와 함께, 나는 반환되는 각 테이블에서 데리러 행 수를 분리해야합니다.

+1

어떤 방식 으로든 테이블을 결합하고 있습니까? –

+1

쿼리를 실행하려면 무엇을 사용하고 있습니까? 대부분의 Db 드라이버는 일종의 '반환 된 행 수'를 지원합니다. – ethrbunny

+0

phpMyAdmin을 사용하고 있습니다. @GreenDemon, 이러한 쿼리는 내 가입 방법이며 잘 작동하지만이 작업을 수행하는 데 가장 효율적인 방법임을 확인하고자합니다. –

답변

0

글쎄, 당신은 정말로 쿼리를 피할 수 없습니다. 행을 가져 오려면 각 테이블을 쿼리해야하며 전체 테이블 스캔이 필요합니다.

tableA(id), tableB(id)tableC(cid)에 색인을 생성하여 개수를 최적화 할 수 있습니다.

응용 프로그램 계층에서 행을 가져 와서 나중에 계산할 수도 있습니다.

쿼리 구문이 올바르지 않습니다. 아마도 당신은 다음을 의미합니다 :

select (SELECT count(id) from tableA where id=100) as count_tableA, a.* 
from TableA 
where id = 100; 

등등.