0

別の質問で述べたように、私は学校向けの小さなリレーショナル データベース クエリに取り組んでいます。このクエリは、女性の友達を持つ男性ユーザーを見つけるためのものです。データベースの関連構造は次のとおりです

Table: Users
Attributes: Id_pk, Name, Gender

Table: Friends
Attributes: Id1_pk (fk to users.id), Id2_pk (fk to users.id),Startdate

このクエリを使用してこのクエリを解決しようとしています:

select distinct id from friends, users, where users.id = id1 and users.gender = 'M'
intersect
select id from friends, users where users.id = id2 and users.gender = 'F'

したがって、これは有効な検索ですが、データベースには確かに男性と女性の間に友達がいますが、行は選択されていません。同じ users.gender を 2 回チェックしているという問題が発生していると思いますが、解決方法がわかりません。このクエリを作成する際の私の考えは、スロット id1 と id2 で人物の性別を確認し、id1 が男性で id2 が女性であることを確認することでした。

ありがとうございました

4

1 に答える 1

2

これを試してください(> = Oracle 9xと仮定):

 WITH FemalesQuery AS
(
    SELECT Id_pk
      FROM Users
     WHERE Gender = 'F'
), MalesQuery AS
(
    SELECT Id_pk
      FROM Users
     WHERE Gender = 'M'
)

SELECT Id2_pk
  FROM Friends
 WHERE Id1_pk IN (SELECT Id_pk FROM FemalesQuery)
   AND Id2_pk IN (SELECT Id_pk FROM MalesQuery)
 UNION
 SELECT Id1_pk
  FROM Friends
 WHERE Id2_pk IN (SELECT Id_pk FROM FemalesQuery)
   AND Id1_pk IN (SELECT Id_pk FROM MalesQuery)
于 2013-10-16T00:37:41.667 に答える