比较子查询

时间:2016-12-06 18:43:20

标签: postgresql

我有两个子查询。这是子查询A的输出....

  id   |    date_lat_lng    | stat_total | rnum 
-------+--------------------+------------+------
 16820 | 2016_10_05_10_3802 |          9 |    2
 15701 | 2016_10_05_10_3802 |          9 |    3
 16821 | 2016_10_05_11_3802 |         16 |    2
 17861 | 2016_10_05_11_3802 |         16 |    3
 16840 | 2016_10_05_12_3683 |         42 |    2
 17831 | 2016_10_05_12_3767 |          0 |    2
 17862 | 2016_10_05_12_3802 |         11 |    2
 17888 | 2016_10_05_13_3683 |         35 |    2
 17833 | 2016_10_05_13_3767 |         24 |    2
 16823 | 2016_10_05_13_3802 |         24 |    2

和子查询B,其中date_lat_lng和stat_total与子查询A具有共性,但id不具有。

  id   |    date_lat_lng    | stat_total | rnum 
-------+--------------------+------------+------
 17860 | 2016_10_05_10_3802 |          9 |    1
 15702 | 2016_10_05_11_3802 |         16 |    1
 17887 | 2016_10_05_12_3683 |         42 |    1
 15630 | 2016_10_05_12_3767 |         20 |    1
 16822 | 2016_10_05_12_3802 |         20 |    1
 16841 | 2016_10_05_13_3683 |         35 |    1
 15632 | 2016_10_05_13_3767 |         23 |    1
 17863 | 2016_10_05_13_3802 |          3 |    1
 16842 | 2016_10_05_14_3683 |         32 |    1
 15633 | 2016_10_05_14_3767 |         12 |    1

子查询A和B都从同一个表中提取数据。我想删除该表中与子查询A共享相同ID的行,但仅限于date_lat_lngstat_total在子查询B中具有共享匹配的行。

有效地我需要:

DELETE FROM table WHERE
id IN
(SELECT id FROM (subqueryA) WHERE
subqueryA.date_lat_lng=subqueryB.date_lat_lng
AND subqueryA.stat_total=subqueryB.stat_total)

除了我不知道在哪里放置子查询B,或者我需要一个完全不同的结构。

1 个答案:

答案 0 :(得分:0)

像这样,

DELETE FROM table WHERE
id IN (
SELECT DISTINCT id
FROM subqueryA
JOIN subqueryB
  USING (id,date_lat_lng,stat_total)
)