2017-04-19 52 views
0

我被要求返回所有property_id(PK),其中客戶擁有多個屬性(property_id,FK)。下面是視覺參考下表:從表中返回PK,其中FK出現多次

CustomerPropertiesTable

我將如何做到這一點在有效的SQL語法?我的思維過程如下:

SELECT property_id FROM CustomerProperties 
WHERE COUNT(property_id) > 1 

這顯然是無效的,但這是我的OOP思維過程。

+0

請閱讀http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557和接受的答案 –

+0

您正在使用哪些DBMS? –

+0

回覆:代碼圖片 - 是否也可以用於數據庫表格表示? 我正在使用MS SQL Server Management Studio。 – Rhonage

回答

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 
    ); 

查詢的第二部分查找具有多個屬性的客戶。

+0

是的,這是預期的結果。 謝謝!我可以證實這很好。 你能解釋「IN」子句部分嗎?我無法理解它是如何知道檢查多個property_id的,因爲沒有在分組中指定property_id。 – Rhonage

+0

這是關於T-SQL IN子句的文檔。 https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/in-transact-sql使用示例數據進行播放並獨立運行子查詢,我認爲這對您會很明顯IN子句的工作原理。 – JSR

0

集團被列你想成爲獨一無二的,只選擇那些具有計數組> 1

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

當組則全部彙總功能,如COUNT()應用到每個組和不完整的結果組。 HAVING子句用於組範圍條件,而WHERE子句用於記錄條件。

+0

感謝您的回覆! 不幸的是,它不是我的工作。不應該爲customer_id使用GROUP BY子句,因爲這是我們要檢查> 1條記錄的列嗎? 再次感謝。 – Rhonage

+0

不工作太模糊。什麼不工作? –