MySQL查询使用来自不同表的信息

时间:2011-12-12 20:51:20

标签: mysql

我有一个相当复杂的SQL查询,我正在寻求一些帮助。

我有两个表:历史表和详细信息表。

历史记录表包含以下列。

Event Date(ev_date) 
Event Code(ev_code)  
Machine ID(mc_id)

“详细信息”表包含以下列:

Machine ID(mc_id), 
Location ID(lo_id) 
Machine Name(mc_name)

我需要一个查询,它返回位置ID给定的给定机器组的给定日期范围之间历史表中事件数的计数。

所以,在sudo代码中有点:

SELECT COUNT(*) 
FROM history 
WHERE ev_date (BETWEEN start_date AND end_date) AND ev_code = 1 AND ???? 

(mc_id必须从详细信息表中获得某些lo_id)。

这有意义吗?

由于

2 个答案:

答案 0 :(得分:1)

SELECT COUNT(*)
    FROM history h
    WHERE h.ev_date BETWEEN @start_date AND @end_date
        AND ev_code = 1
        AND EXISTS(SELECT NULL
                       FROM details d
                       WHERE h.mc_id = d.mc_id
                           AND d.lo_id = @LocationID);

答案 1 :(得分:1)

假设您在history上的detailsmc_id之间存在一对一的映射:

SELECT COUNT(*)
FROM history h
JOIN details d USING mc_id
WHERE h.ev_code = 1
AND h.ev_date between start_date and end_date
AND d.lo_id IN (?, ?, ?, ...)

或者ON h.mc_id = d.mc_id代替USING mc_id