2012-07-12 90 views
1

在我的应用程序中,我想选择table1中的所有数据和相关表2的最大ID。问题是,如果在table2中有一个实体,SQL工作正常。但是,如果不是restulset填充NULL:从相关表中选择最大值

SELECT table1.*, CONCAT(table1.number, '-', table1.item_id) AS IdNumber, MAX(table2.id) AS Table2Id 
    FROM table1 
    LEFT JOIN table2 ON (table1.ID = table2.EQUIP_ITEM_ID) 
WHERE table1.GROUP_ID > 0 
    AND table2.IN_PROGRESS = 1 
ORDER BY table1.ID ASC 
LIMIT 15 

我需要更改,以检索正确的结果集?

+2

MySQL的?您需要使用适当的RDBMS标记它 – JNK 2012-07-12 16:32:21

+0

是的,它是MySQL。 – 2012-07-12 16:35:20

回答

1

试试这个::

SELECT table1.*, CONCAT(table1.number, '-', table1.item_id) AS IdNumber, MAX(IFNULL(table2.id),0) AS Table2Id 
    FROM table1 
    LEFT JOIN table2 ON (table1.ID = table2.EQUIP_ITEM_ID) 
WHERE table1.GROUP_ID > 0 
    AND table2.IN_PROGRESS = 1 
ORDER BY table1.ID ASC 
LIMIT 15 
1

问题是与第二个WHERE条件,其中table2.IN_PROGRESS = 1

如果你仍然想table1的数据显示出来,那么如果你想显示0作为修改SQL来

(table2.IN_PROGRESS = 1 OR table2.IN_PROGRESS IS NULL)

值然后更改MAX(table2.id)COALESCE(MAX(table2.id),0)

+0

或者,您可以将条件移至“ON”子句。 – 2012-07-12 16:38:55

1

选择Table 1 *,CONCAT(table1.number, ' - ',table1.item_id)。AS的ID号,MAX(table2.id)AS Table2Id

FROM表1

LEFT JOIN表2 ON(表1 .ID = table2.EQUIP_ITEM_ID)

WHERE table1.GROUP_ID> 0

AND table2.IN_PROGRESS = 1

和IS NOT NULL(table2.IN_PROGRESS)

ORDER BY table1.ID ASC

LIMIT 15

它必须是好的;)