2017-07-27 12 views
1

私はサービスとサイトの2つのテーブルを持っています.1つの行に複数の行が存在する可能性がある1対多の関係があります。存在するLEFT JOINを持つIsuue

いくつかのIDが複数回使用されるサイトテーブルを取得しています。今私はこのサイトのサービスからすべての行をフェッチしたいと思います。

SERVICE Table{id} 
SITE Table{id,svcId(from SERVICE Table),siteid} 

SELECT * 
FROM SERVICE 
WHERE EXISTS( 
    SELECT * FROM SITE WHERE (siteid='3' or siteid='4') AND id IN (
    SELECT id FROM SITE GROUP BY id HAVING count(*) > 1 
)) 

選択クエリは、内部の私よりsiteid 3および4と何度も持つすべての行をフェッチ存在しますが、クエリ全体は私にSERVICE TABLEからすべての行をフェッチしています。私はMatching IDを持つ行だけを期待していました。

+0

サンプルデータと予想される結果を適切に提供します。 –

+0

'service'テーブルはどのように' site'テーブルに関連していますか?サブクエリは外部テーブルからの任意の列による外部クエリと相関しないので、常に 'service'テーブルからすべての行またはすべての行を与えます。 – krokodilko

答えて

0

and s.id = st.svcIdの中に適切なエイリアスがある状態を追加する必要があります。

SELECT * 
FROM SERVICE s 
WHERE EXISTS 
    (SELECT * 
    FROM SITE st 
    WHERE (siteid='3' 
    OR siteid ='4') 
    AND id  IN 
    (SELECT id FROM SITE GROUP BY id HAVING COUNT(*) > 1 
    ) 
    and s.id = st.svcId 
); 
+0

ありがとうございました。感謝... – Guru

0

あなたのサイトID 3と4(すなわち、そのサービスのカウントが> 1になります)の両方に関連するサービスを望んでいるようです。

SELECT sv.* 
FROM SERVICE sv 
INNER JOIN (
     SELECT 
      svcId 
     FROM SITE 
     WHERE (siteid = '3' OR siteid = '4') 
     GROUP BY 
      svcId 
     HAVING COUNT(*) > 1 
    ) si ON sv.id = si.svcId 
+0

何とか私はいつもDBに列が存在するにもかかわらず、この "si.svcId"と無効な識別子としてsqlエラーが発生します。何が間違っているかわからない – Guru

+0

サブクエリは単独で動作しますか? (3 '' サイトID = ORサイトID = '4')部位 FROM WHERE svcId を選択 基 BY svcId COUNT(*)を有する> 1 –

+0

iはサブクエリを実行するときはい、それは作業を行います。 – Guru