SQL查询,如何从表中获取数据但仅当它被插入到另一个表中时

标签 sql join foreign-keys

好吧,我不知道如何解释标题上的这个,所以我会在这里更清楚。

我有几个表:

TiposDeCatalogo:

PK IdTipoCatalogo (int) 
IdVendedor (int)
Nombre (string)
Descripcion (string)
Estado (string)
FechaAlta (date)

Catalogo: 

PK IdCatalogo (int) 
IdTipoCatalogo (int)
IdVendedor (int)
Nombre (string)
Descripcion (string)
Estado (string)
FechaAlta (date)

Catalogo.IdTipoCatalogo = TiposDeCatalogos.IdTipoCatalogo 上有一个外键

我需要一个可以显示 TiposDeCatalogo 上已在 Catalogo 上注册的所有行的查询

例如...

TiposDeCatalogos 有以下几行

IdTipoCatalogo IdVendedor Nombre Estado FechaAlta

1   1   Catalogos de Ventas     Activo  20/08/2012
2   1   Catalogos de CRM        Activo  20/08/2012
3   1   Catalogos de Inventario     Activo  20/08/2012
4   1   Catalogos de Facturacion        Activo  04/09/2012
5   1   Catalogos de Cobranza       Activo  04/09/2012
6   1   Catalogos de Admin      Activo  04/09/2012
7   1   Catalogos de Admin      Activo  04/09/2012
8   1   Catalogos de Finanzas       Activo  04/09/2012
9   1   Catalogos de Clientes       Activo  04/09/2012
12  1   Catalogos de Administ General       Activo  04/09/2012

然后 Catalogo 有以下几行

IdCatalogo IdTipoCatalogo IdVendedor Nombre Estado FechaAlta

1   1   17  Formas de Pago  formas de pago para las ventas  Activo  01/09/2012
2   5   1   Tipos de Moneda     Activo  05/09/2012
3   2   1    Tipos de Agendamiento      Activo  05/09/2012
4   3   1   Tipos de Precios        Activo  06/09/2012
5   5   1    TIpos de Moneda        Activo  06/09/2012
6   3   1   Tipo de Presentacion        Activo  06/09/2012

您可能会注意到,在 Catalogo 中,仅注册了以下 IdTipoCatalogo (1, 2, 3, 5)

所以我想要的是一个向我显示这些 TiposDeCatalogo 的查询(每个只显示一次,因此在此示例中查询应该只返回 4 行)...

希望你能帮帮我,谢谢

最佳答案

您可以使用 EXISTS要做到这一点:

SELECT
    tc.IdTipoCatalogo,
    tc.IdVendedor,
    tc.Nombre,
    tc.Estado,
    tc.FechaAlta
FROM TiposDeCatalogos tc
WHERE EXISTS (
    SELECT 1
    FROM Catalogo c 
    WHERE c.IdTipoCatalogo = tc.IdTipoCatalogo 
)

或者,您可以使用 JOINDISTINCT:

SELECT DISTINCT
    tc.IdTipoCatalogo,
    tc.IdVendedor,
    tc.Nombre,
    tc.Estado,
    tc.FechaAlta
FROM 
    TiposDeCatalogos tc
    JOIN Catalogo c ON c.IdTipoCatalogo = tc.IdTipoCatalogo 

但是,这可能效率较低,因为 DISTINCT 将需要额外的操作来排除 JOIN 产生的重复项。

关于SQL查询,如何从表中获取数据但仅当它被插入到另一个表中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429838/

相关文章:

mysql - 选择 friend 的 friend sql 的性能(但不是我的 friend )

mysql - 我们可以将 M2M 关系的 PK 用于另一个 M2M 表吗?

mysql - 为什么我在 phpmyadmin : Error creating foreign key on revision (check data types)? 上出现此错误

sql - 带有 RETURNS TABLE(id integer) 返回所有 NULL 的 PostgreSQL 存储过程

php - 为每个帖子选择 3 条评论

即使使用 Distinct,MySQL 也会多次返回相同的结果

oracle - 如何映射 Hibernate 集合并强制执行 Oracle 的 NOT NULL 列约束?

mysql - "General error: 1005 Can' t create table"Using Laravel Schema Build and Foreign Keys

sql-server - 如何加速简单连接

Mysql 使用 JOIN 获取过去六周的数据