これは単純なSQL照会の問題だと思いますが、この問題を解決するには、さまざまなSQL結合タイプに慣れていません。SQL照会を作成して以下を取得する方法...
私はこれらのアイテムのさまざまなitems
とowners
を管理するシステムを持っています。システムのuser
には、ユーザーがその所有者を表示する権限を持っている場合、アイテムおよびそのアイテムの所有者に関するすべての情報を表示するためのアクセス権があります。私のスキーマは次のようになります:
Users:
| UserId |
Items:
| ItemId | OwnerId | Name | Age |
Owners:
| OwnerId | FirstName | LastName | State |
OwnerPermissions:
| UserId | OwnerId |
Itemには所有者がない可能性があります.OldIdはItemsテーブルのその行に対してNULLです。
だからエントリは、ユーザーID = 0は、私は、クエリを書きたいOwnerIdに0と1
が所有するすべてのアイテム情報を表示することができます= 0とOwnerIdに= 0とOwnerPermissions
でOwnerIdに= 1ユーザーIDのために存在している場合それがユーザID与えられ、それは、ユーザーが表示する権限を持っている所有者のために、すべての項目と所有者情報を返しとも
クエリに所有者がいないすべての項目を示しています。
select Items.*, Owners.*
from Items
inner join Owners on Items.OwnerId = Owners.OwnerId
inner join OwnerPermissions on OwnerPermissions.OwnerId = Owners.OwnerId
where OwnerPermissions.UserId = $userId
のGeを表示する権限を持っている人が所有しているすべてのアイテム情報が表示されますが、所有者が所有していないアイテムは失われます(OwnerIdはNULLです)。
このクエリを作成する最適な方法は何ですか?私はSQL Serverを使用していますが、私はそれに頼らない答えが好きです(しかし、SQL Serverでできることがあります)。
"ANSI標準SQLでは、INNER、OUTER、LEFT、RIGHTの4種類のJOINを指定しています。" - http://en.wikipedia.org/wiki/Join_(SQL \) –