2013-01-03 35 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