1

どちらかを持っているユーザーを見つける必要があります

  1. 共有ビデオ クレジット;
  2. 共有制作クレジット; また
  3. 共有グループ。

これは現在私が思いついたクエリです:

SELECT profile_id FROM productions_productionmember WHERE production_id in 
    (SELECT production_id FROM productions_productionmember WHERE profile_id=?)
UNION
SELECT profile_id FROM groups_groupmember WHERE group_id in 
    (SELECT group_id FROM groups_groupmember WHERE profile_id=?)
UNION
SELECT profile_id FROM videos_videocredit WHERE video_id in 
    (SELECT video_id FROM videos_videocredit WHERE profile_id=?)

関連する表:

groups_groupmember
- profile_id
- group_id 

videos_videocredit
- profile_id
- video_id

productions_productionmember
- profile_id
- production_id

このクエリをどのように改善できますか?

4

4 に答える 4

0
SELECT DISTINCT p.profile_id 
FROM productions_productionmember p
left outer join groups_groupmember g on g.profile_id = p.profile_id
left outer join videos_videocredit v on v.profile_id = p.profile_id
WHERE v.video_id is not null or g.group_id is not null
or p.production_id in (SELECT production_id 
                     FROM productions_productionmember 
                     WHERE profile_id=?)
于 2012-05-30T05:41:17.533 に答える
0

3 つのテーブルのいずれかに存在するプロファイルのリストが必要です。

     SELECT profile_id FROM productions_productionmember 
     UNION
     SELECT profile_id FROM groups_groupmember 
     UNION
     SELECT profile_id FROM videos_videocredit 

production_id\group_id\video_id が null になる可能性がある場合は、これらのクエリで IS NOT NULL チェックを使用できます。

クエリで渡す profile_id は何ですか? プロファイルがテーブルのいずれかに存在するかどうかを確認する必要がある場合は、上記のクエリによって返された結果に where 句を追加できます。

     SELECT count(*) 
     from (SELECT profile_id FROM productions_productionmember 
           UNION
           SELECT profile_id FROM groups_groupmember 
           UNION
           SELECT profile_id FROM videos_videocredit ) subq
     where subq.profile_id = ?
于 2012-05-30T06:10:04.430 に答える
0
Select *
From productions_productionmember as a,
     groups_groupmember           as b,
     videos_videocredit           as c
Where a.profile_id in (select ...) or
      b.group_id in (select ...) or 
      c.video_id in (select...)

それが役に立てば幸い...

于 2012-05-30T05:51:57.310 に答える
0
SELECT pp.profile_id 
FROM productions_productionmember pp
JOIN productions_productionmember pp2 ON pp.production_id=pp2.production_id 
     AND pp2.profile_id=?
UNION
SELECT gg.profile_id
FROM groups_groupmember gg
JOIN groups_groupmember gg2 ON gg.group_id=pp2.group_id
     AND gg2.profile_id=?
UNION
SELECT vv.profile_id 
FROM videos_videocredit vv
JOIN videos_videocredit vv2 ON vv.video_id=vv2.video_id 
     AND vv2.profile_id=?

これにより、内部クエリが排除されます。これによりクエリ速度が向上するかどうかはわかりません。
このクエリは、テーブル内に 2 つ以上ある profile_ids を返します。

于 2012-05-30T06:15:25.970 に答える