从表中返回PK,其中FK出现不止一次

时间:2017-04-19 20:53:23

标签: sql

我被要求返回所有property_id'(PK),其中客户拥有多个属性(property_id,FK)。以下是视觉参考表:

CustomerPropertiesTable

如何在有效的SQL语法中执行此操作?我的思维过程是这样的:

SELECT property_id FROM CustomerProperties
WHERE COUNT(property_id) > 1

这显然无效,但这是我的OOP思维过程。

2 个答案:

答案 0 :(得分:0)

按您想要唯一的列分组,并仅选择那些具有计数>的组1

SELECT property_id 
FROM CustomerProperties
GROUP BY property_id
HAVING COUNT(*) > 1

当您进行分组时,所有聚合函数(如COUNT())将应用于每个组,而不是完整的结果集。 HAVING子句用于组范围的条件,而WHERE子句用于记录条件。

答案 1 :(得分:0)

如果我正确理解您的问题,您的样本表图像的预期结果将为1,4。

这样的事情应该让你开始。

DECLARE @Test TABLE 
(
    PropertyId  INT PRIMARY KEY,
    CustomerId  INT
);

INSERT @Test ( PropertyId, CustomerId ) 
VALUES ( 1, 1 ), ( 2, 2 ), (3, 3 ), ( 4, 1 );

SELECT
    PropertyId
FROM 
    @Test
WHERE 
    CustomerId IN
    ( 
        SELECT 
            CustomerId 
        FROM 
            @Test
        GROUP BY 
            CustomerId
        HAVING COUNT(*) > 1
    );

查询的第二部分查找具有多个属性的客户。