2017-04-19 15 views
0

顧客が複数のプロパティ(property_id、FK)を所有しているすべてのproperty_id(PK)を返すように求められました。ここでは、視覚参照のためのテーブルには、次のとおりです。FKが複数回出現する表からPKを返す

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

Re:コードの画像 - DB表の表記もカウントされますか? 私は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 
    ); 

クエリの2番目の部分は、複数のプロパティを持つ顧客を検出します。

+0

はい、それは予想結果です。 ありがとうございます!私はこれがうまくいくことを確認することができます。 "IN"句の部分について説明できますか?私は、property_idがグループ内で指定されていないので、複数のproperty_idを調べる方法を理解できません。 – Rhonage

+0

T-SQL IN句のドキュメントです。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sqlサンプルデータを再生し、サブクエリを単独で実行すると、明らかになりますIN節の働き – JSR

0

グループあなたはCOUNTのようなグループは、すべての集約関数は、()各グループではなく完全な結果に適用すると一意で、数> 1

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

を持つグループのみを選択したい列でセット。また、HAVING節はグループ全体の条件に使用され、WHERE句はレコード条件に使用されます。

+0

あなたの返信ありがとう! 残念ながら、それは私のために働いていません。 GROUP BY句をcustomer_idにしてはならないのは、それが> 1レコード以上を確認する列なのですから? もう一度ありがとうございます。 – Rhonage

+0

動作していないのはあまりにも曖昧です。何がうまくいきませんか? –

関連する問題