好吧,我不知道怎么在标题上解释这个,所以我会更清楚。
我有几张桌子:
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
我需要一个查询,可以显示已在Catalogo上注册的TiposDeCatalogo上的所有行
例如......
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行)....
我希望你能帮助我,谢谢
答案 0 :(得分: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
)
或者,您可以使用JOIN
和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
生成的重复项。