2012-07-12 93 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

它必須是好的;)