次のように 2 つの MySql テーブルがあります。
resource
-----------------------------------------------
id name group owner_id
-----------------------------------------------
1 MyResource1 hs 11
2 MyResource2 ms 24
3 MyResource3 ps 11
...
resource_access
-----------------------------------------------
id resource_id user_id
-----------------------------------------------
1 1 12
2 2 24
3 2 11
4 3 15
...
ここで、最初のテーブルはもちろんリソースのリストで、列にはそれぞれの所有者が表示されowner_id
ます。2 番目の表は、このリソースを別のユーザーと「共有」した結果です。テーブルには、所有者交換からの乱雑なクリーンアップの結果として、の行に相当する を持つレコードresource_access
が含まれる場合があります。user_id
owner_id
resource_access
ユーザーが所有者であるか共有されているかに関係なく、ユーザーがアクセスできるリソースの ID、名前、およびグループを取得したいだけです。サンプルユーザー (24) の MySQL クエリは次のとおりです。
SELECT resource.id, resource.name, resource.group
FROM `resource`
INNER JOIN resource_access ON (
resource.owner_id='24'
OR (
resource_access.user_id='24' AND
resource_access.resource_id=resource.id
)
)
現在、リソース番号 2 のid
、name
、およびgroup
を複数回 (12 のように) 返します。これには考えられる原因がありますか?私は試しLEFT
てRIGHT
参加しましたが、同じ結果が得られています。resource
テーブルには多くのレコードがありますが、 2 のレコードはありません。同じユーザーとリソースを 2 回共有してid
も、重複する行はありません。resource_access
前もって感謝します。