好吧,我不知道如何解释标题上的这个,所以我会在这里更清楚。
我有几个表:
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
)
或者,您可以使用 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
产生的重复项。
关于SQL查询,如何从表中获取数据但仅当它被插入到另一个表中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429838/