3

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

我有几张桌子:

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)

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

我希望你能帮助我,谢谢

4

1 回答 1

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 
)

或者,您可以使用JOINand DISTINCT

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.

于 2012-09-14T18:17:57.443 回答