2013-01-03 5 views
0

나는 테이블이 : 나는 자신이 테이블에 가입하실 수 있습니다 어떻게MySQL의 쿼리

InvoiceItem 
---------------- 
id  
type  <- 'ITEM' 'FEE' 'OTHER' 
parentid <- InvoiceItem id of the parent invoice item 
<some other columns> 

을, 모든 InvoiceItem 열을받을 경우 ID = 지정된 ID 더하기 하나는 그 주어진 InvoiceItem id를 parentid로 갖는 항목이 테이블에있는 경우 true | false 1 | 0을 제공합니다.

답변

2
  1. 상관 하위 쿼리 사용 : 외부 사용

    SELECT a.*, 
         EXISTS(SELECT * FROM InvoiceItem b WHERE b.parentid = a.id) 
         AS has_children 
    FROM InvoiceItem a 
    WHERE a.id = ? 
    
  2. 가입 :

    SELECT a.*, COUNT(b.id) > 0 AS has_children 
    FROM InvoiceItem a LEFT JOIN InvoiceItem b ON b.parentid = a.id 
    WHERE a.id = ? 
    
+0

가 다른 것보다 더 나은 수행하려는 이들 중 하나입니까? – kasdega

+0

@ kasdega : 벤치마킹 해 보시겠습니까? 위와 같이'a.id'에서 결과 집합을 필터링한다면, 두 결과간에 중대한 차이는 없을 것입니다. 이러한 결과를 여러 레코드로 가져온 경우 일반적으로 두 번째 (외부 조인) 방식을 사용하면 성능이 향상 될 것으로 기대합니다. – eggyal

+0

고마워,이게 내가 필요한거야. – kasdega