2017-05-09 17 views
0

3つのテーブルが接続されています。私は単一のSQLの選択をする必要があると私はいくつかのフォームの結合を使用する必要があるが、かなり方法を知っている。私はあるユーザーIDのセッションは、そのobject'sエリアへのアクセス権を持っている場合はオブジェクトIDが(その会社は地域へのアクセス権を持っている場合、ユーザーがアクセスできるようになります)私が持っているテーブルを選択することにしたい。複数のテーブルからの条件付きSQL結合

+----------+--------+ Objects 
| objectID | areaID | 
+----------+--------+ 
|  1 |  2 | 
|  2 |  2 | 
|  3 |  3 | 
+----------+--------+ 
+-----------+--------+ Users 
| companyID | userID | 
+-----------+--------+ 
|   1 |  1 | 
|   1 |  2 | 
|   1 |  3 | 
+-----------+--------+ 
+-----------+--------+ Access 
| companyID | areaID | 
+-----------+--------+ 
|   1 |  1 | 
|   1 |  2 | 
|   1 |  3 | 
+-----------+--------+ 

答えて

1

選択したユーザーIDと対応するエリアIDはinner queryでcompanyIDを使用します。そして、これを使用して、内部使用してオブジェクト表から個別のオブジェクトIDを選択し、この文字列で検索してくださいinner query

を貫通して形成されたテーブルに再び参加する: -

Select distinct a.objectID 
from 
Objects a 
inner join 
(
Select a.*,b.areaID 
from 
Users a 
inner join 
Access b 
on a.companyID=b.companyID 
) b 
on a.areaID=b.areaID 
Where b.UserID= 1; 
+0

をしかし、私は、アクティブなuser'sユーザーIDのセッション変数を置くでしょうか? – KingleyMosso

+0

ちょうど 'Where condition'をuserIDで置きます。私のクエリを更新しました。例として使用されたuserID 1。あなたはそれを変えることができます。 –

0

私は右のあなたを理解していれば2つのINNER JOIN機能はなるだろうと同じように、それはそうあなたが探している結果:

WITH ONE AS (
    SELECT a.companyID, a.userID, b.areaID 
    FROM Users a 
    INNER JOIN Access b 
    ON a.companyID = b.companyID 
    ) 

SELECT a.companyID, a.userID, a.areaID, b.objectID 
FROM ONE a 
INNER JOIN Objects b 
ON a.areaID = b.areaID; 

はEDIT:返信

コメントします

あなたは、特定のユーザIDの値に結果を制限したい場合は、あなたがWHERE句必要があります:

WITH ONE AS (
    SELECT a.companyID, a.userID, b.areaID 
    FROM Users a 
    INNER JOIN Access b 
    ON a.companyID = b.companyID 
    ) 

SELECT a.companyID, a.userID, a.areaID, b.objectID 
FROM ONE a 
INNER JOIN Objects b 
ON a.areaID = b.areaID 
WHERE a.userID = ${specific_user_id}; 
+0

しかし、私はアクティブユーザーのuserIDのセッション変数をどこに置くのですか? – KingleyMosso

+0

私はちょうどそれを行うために 'WHERE'節を追加する方法を示す編集を行いました。 – nxl4

関連する問題