0

私は、それらを一緒にマップする3番目のテーブルに基づいて、2つのテーブルからJOIN/UNION/任意のデータを作成しようとしています。これがアイデアです:

表 USERS には、ユーザー ID、ユーザー名、その他のデータが含まれています。テーブル GROUPS には、グループ ID、グループ名、その他のデータが含まれています。

テーブル USERGROUPMAP には、一緒にマップされた一連のユーザー ID とグループ ID が含まれており、これらは USERS と GROUPS の ID に対応しています。各ユーザーは複数のグループに属することができ、各グループは複数のユーザーを持つことができます。

オブジェクトまたは CSV データを 1 つのフィールドに格納することで常にこれを行ってきました。たとえば、MEMBERS というグループで列を作成し、id1、id2、id3 を格納しています...しかし、これが提示されたものです。

スキーマを変更できません...これがJOINやUNIONなどに関係していることは知っていますが、私のSQLは非常に錆びているので、誰か助けてもらえますか?

私のおそらく半正しい考え -

SELECT USERS.uid, 
       GROUPS.gid, 
       USERGROUPMAP.uid, 
       USERGROUPMAP.gid 
  FROM USERS, 
       GROUPS, 
       USERGROUPMAP 
  JOIN ON ((USERS.uid = USERGROUPMAP.uid) AND (GROUPS.gid = USERGROUPMAP.gid))

任意のヒント?:( .. みんなありがとう。

編集、予想される IO

USERS テーブルには一連の UID が含まれています... 1、2、3、4、5、したがって、GROUPS テーブルには一連の GID、1000、1001、1002 などが含まれます。

USERGROUPMAP には、どのユーザーがどのグループに属しているかに対応するタプルが含まれます (例: (1,1002) (2,1000) (5,1003) (5,1000))。

ユーザーが属しているグループのリストを取得しようとしているので、この例では 5,1003 と 5,1000 の 2 つの行を取得したいと考えています。

4

2 に答える 2

1
Select a.userID, a.name, b.groupName
from USERS a, GROUPS b, USERGROUPMAP c
where c.userID = a.userID and 
b.groupID = c.groupID and
c.userID = <searchID>

検索するユーザー ID は、クエリ内の searchID です。グループのユーザーをリストする場合は、userID を groupID に置き換えることができます。

于 2012-09-24T20:09:17.737 に答える
1

USERS にも GROUPS にも重複がないと仮定すると、これは 3 つのテーブル間の単純な結合です。

SELECT
  USERS.FIELD1,
  USERS.FIELD2,
  -- ...
  USERS.FIELDN,
  GROUPS.FIELD1,
  GROUPS.FIELD2,
  -- ...
  GROUPS.FIELDN
FROM USERS
JOIN USERGROUPMAP ON USERS.UID = USERGROUPMAP.UID
JOIN GROUPS ON USERGROUPMAP.GID = GROUPS.GID
于 2012-09-24T20:11:56.510 に答える