2013-01-03 32 views
0

我有一個表:MySQL查詢與聯接回到同一臺和一個計數

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

我怎樣才能將這個表與自身,讓所有的InvoiceItem列其中id =給定id加一個如果表中包含任何具有給定InvoiceItem標識的項作爲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