加入2个postgres sql查询

时间:2018-04-13 06:36:06

标签: sql postgresql

我正在尝试加入两个Postgres查询的工头报告。 我正在尝试查看哪些服务器已分配给puppet class 180

第一个查询是:

select puppetclass_id , host_id from host_classes where puppetclass_id = 180

结果如下

 puppetclass_id | host_id 
----------------+---------
            180 |     378
            180 |     377

第二个查询是:

select id, name, operatingsystem_id, enabled from public.hosts

结果如下:

 id  |            name             | operatingsystem_id | enabled 
-----+-----------------------------+--------------------+---------
 404 | s4-somedevserver- 4r5       |                 17 | t
 411 | mob-omedevserver- 4r2       |                 19 | t

我试图将第一个查询的host_id和第二个查询的id匹配在一起,但删除重复项。 我有以下查询,但它只显示我们所有的服务器,而不仅仅是显示匹配puppetclass 180的服务器

SELECT DISTINCT id, name, operatingsystem_id
FROM
  (SELECT puppetclass_id , host_id
   FROM host_classes
   WHERE puppetclass_id = 180) t
CROSS JOIN
  (SELECT id, name, operatingsystem_id, enabled
   FROM public.hosts) m
ORDER BY id

任何正确方向的指针都将受到赞赏

1 个答案:

答案 0 :(得分:2)

我想你只想在这里INNER JOIN

SELECT DISTINCT t2.*
FROM host_classes t1
INNER JOIN public.hosts t2
    ON t1.host_id = t2.id
WHERE
    t1.puppetclass_id = 180
ORDER BY t2.id;

您目前正在两个表之间执行CROSS JOIN,这将倾向于给出每个表中所有记录的叉积。