如果在子行中找到匹配项,则删除父行,mysql UNION

时间:2017-11-02 17:32:10

标签: mysql sql

您好我有两张桌子 我们称之为表格时间表和表格约会

日程表:

+----+
| id |
+----+
|  3 |
| 42 |
+----+

约会表:

+----+-------------+
| id | schedule_id |
+----+-------------+
|  1 |           0 |
|  2 |          42 |
+----+-------------+

我有一个查询从数据库中获取约会和日程表,它看起来与此类似:

SELECT id FROM appointment 
UNION ALL
SELECT id FROM schedule

我想获得所有的时间表和约会,如果有一个具有匹配schedule_id的约会我希望从结果中删除时间表行

最终结果将是

+----+-------------+
| id | schedule_id |
+----+-------------+
|  1 |           0 |
|  2 |          42 |
|  3 |           0 |
+----+-------------+

创建该查询需要做什么?

2 个答案:

答案 0 :(得分:1)

我建议:

select a.id, a.schedule_id
from appointment a
union all
select s.id, 0
from schedule s 
where not exists (select 1 from appointment a where a.id = s.id);

答案 1 :(得分:1)

这是一种可能性:

select id, schedule_id from
  (
  select id, 0 as schedule_id from schedule
  union
  select id, schedule_id from appointment
  ) t
  where id not in (select distinct schedule_id from appointment);