当前位置: 首页 > 面试题库 >

如何防止内部联接查询重复(Postgres)

酆耀
2023-03-14
问题内容

我试图了解如何创建查询以基于内部联接过滤掉一些结果。

考虑以下数据:

formulation_batch
-----
id  project_id  name    
1   1           F1.1
2   1           F1.2
3   1           F1.3
4   1           F1.all

formulation_batch_component
-----
id  formulation_batch_id    component_id
1   1                       1
2   2                       2
3   3                       3
4   4                       1
5   4                       2
6   4                       3
7   4                       4

我想选择project_id为1的所有composition_batch记录,并具有component_id为1或2的composition_batch_component。因此,我运行以下查询:

SELECT formulation_batch.* 
FROM formulation_batch 
INNER JOIN formulation_batch_component
ON formulation_batch.id = formulation_batch_component.formulation_batch_id
WHERE formulation_batch.project_id = 1 
    AND ((formulation_batch_component.component_id = 2 
        OR formulation_batch_component.component_id = 1 ))

但是,这将返回重复的条目:

1;"F1.1"
2;"F1.2"
4;"F1.all"
4;"F1.all"

有没有一种方法可以修改此查询,以便仅获取与条件匹配的唯一composition_batch记录?

例如:

1;"F1.1"
2;"F1.2"
4;"F1.all"

谢谢你的时间!


问题答案:

一种方法是使用distinct

SELECT distinct "formulation_batch".* 
FROM "formulation_batch" 
INNER JOIN "formulation_batch_component" 
ON "formulation_batch"."id" = "formulation_batch_component"."formulationBatch_id" 
WHERE "formulation_batch"."project_id" = 1 
    AND (("formulation_batch_component"."component_id" = 2 
        OR "formulation_batch_component"."component_id" = 1 ))


 类似资料:
  • 我有一个使用TypeORM包与Postgres SQL交互的nestjs应用程序。 我有下面的代码, 对于键和用户实体,我需要将内部连接创建为 选择*FROM key INNER JOIN user ON key.id=user.“keyid”,其中user.“userid”=1; 如何使用typeorm编写等效的内部联接查询? 如何使用typeorm执行上面的SQL查询?

  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!

  • 问题内容: 我绝对是SQL的新手,我一直在努力用Postgresql中的以下表结构编写一个复杂的查询: 查询的目的是获取每个用户的报告类型数量,并将其显示在一列中。有三种不同类型的报告。 使用group-by的简单查询将解决问题,但将其显示在不同的行中: 问题答案:

  • 问题内容: 这个问题已经在这里有了答案 : 显式与隐式SQL连接 (12个答案) 6年前关闭。 之间的性能(在mysql中)是否有差异 和 ? 问题答案: 从问题44917的公认答案中得出: 在性能方面,它们是完全相同的(至少在SQL Server中是这样),但请注意,它们已弃用隐式外部联接语法。 在MySql中,结果是相同的。 我个人会坚持使用明确的联接表……这是“社会上可以接受的”方法。

  • 问题内容: 我有两个要与之进行内部联接的表。 一个是主键为的表。 另一个表是外键在哪里。也有一个列,其中where是表的外键。 我正在尝试汇总一个ActiveRecord查询,在这里我可以选择N天前或之前创建的所有用户,并且其中任何一个都没有等于特定ID的用户。我试图做这样的事情: 此查询字段超过30,000个结果,这是不正确的,因为Users表仅具有12,000行。 我到底在做什么错? 问题答案

  • 问题内容: 我想我正在解决这个问题,但是遇到了另一个障碍,并且不知道如何解决它 此查询有什么问题- 只需获取通用的“您有一个错误”,它指向联接,但我不知道如何解决它。我想要对customer_address_entity进行联接,因为它具有我需要在其中一条select语句中使用的另一个唯一ID。 问题答案: 首先,您的代码如下所示: 很明显,您在FROM之前有JOIN。 其次,您有一个带有unic