0
我有一个结果集,我需要从另一个表中加入相关的字段。MySQL连接字段结果集
我有以下两张表。 第一个表,“部件”,保持有关组件信息:
+----+-------+------------+-----------+
| id | name | serial_num | model_num |
+----+-------+------------+-----------+
| 1 | comp1 | 0000 | AAAA |
| 2 | comp2 | 0001 | AAAB |
| 3 | comp1 | 0010 | AABA |
| 4 | comp2 | 0011 | AABB |
| 5 | comp3 | 0100 | ABAA |
| 6 | comp1 | 0101 | AAAA |
+----+-------+------------+-----------+
第二个表,“componentLog”跟踪哪些系统的组件属于跨时间:
+-------------+-----------+---------+---------+-------+
| action_date | component | system | action | notes |
+-------------+-----------+---------+---------+-------+
| 2010-01-01 | 1 | CZMIL01 | added | NULL |
| 2010-02-25 | 1 | CZMIL01 | removed | NULL |
| 2010-01-01 | 2 | CZMIL01 | added | NULL |
| 2010-02-03 | 2 | CZMIL01 | removed | NULL |
| 2010-02-03 | 2 | CZMIL02 | added | NULL |
| 2010-01-14 | 3 | CZMIL02 | added | NULL |
| 2010-01-14 | 4 | CZMIL02 | added | NULL |
| 2010-02-03 | 4 | CZMIL02 | removed | NULL |
| 2010-02-03 | 4 | CZMIL01 | added | NULL |
| 2010-01-14 | 5 | CZMIL02 | added | NULL |
| 2010-02-25 | 6 | CZMIL01 | added | NULL |
+-------------+-----------+---------+---------+-------+
我有一个查询告诉我哪些组件在指定日期的指定系统:
SELECT *
FROM components
WHERE id IN (
SELECT component
FROM componentLog
WHERE action_date <= '2010-02-25'
AND system = 'CZMIL01'
)
AND id NOT IN (
SELECT component
FROM componentLog
WHERE action_date <= '2010-02-25'
AND system = 'CZMIL01'
AND action = 'removed'
)
ORDER BY name;
该询问提供以下结果集:
+----+-------+------------+-----------+
| id | name | serial_num | model_num |
+----+-------+------------+-----------+
| 6 | comp1 | 0101 | AAAA |
| 4 | comp2 | 0011 | AABB |
+----+-------+------------+-----------+
我需要的是从'componentLog'表中加入'action_date'字段到这个结果集,从而指定何时将组件添加到系统中。
检查编辑过的版本。 –
感谢您的回复! 它看起来像第二个查询是在正确的轨道上。但是,给定的组件可能会在不同的方程中多次添加和删除系统。所以我不能仅仅在组件被删除的情况下排除组件。 “已删除”操作必须在适当的时间间隔内。 – user6431631
您可以将'action_date somedate'条件添加到'exists'来处理它。查询修改,以包括该。 –