0

SQL-Server 2008を使用しており、次の表があります。

ユーザー

ユーザーID
1
2
3

オブジェクト

objectid | カテゴリー
9 | A
8 | B
7 | A
6 | C

userobjects

ユーザーID| objectid
1 | 9
3 | 7
3 | 6

ご覧のとおり、userobjectsはリンクテーブルです。残念ながら、いくつかのエントリがありません。スクリプトにそれらを含めることはできますが、SQLに解決策があるかどうか疑問に思います。

カテゴリ「A」に属するすべてのユーザーIDおよびすべてのオブジェクトIDについて、ユーザーオブジェクトにエントリが必要です。だから私が欲しかったのはこれです:

ユーザーID| objectid
1 | 9
1 | 7
2 | 9
2 | 7
3 | 9
3 | 7
3 | 6
4

2 に答える 2

1

スクリプトにそれらを含めることはできますが、SQLに解決策があるかどうか疑問に思います。

これは、を使用した選択クエリUNIONです(ここではSQL-DEMOです)。

select u.userId, o.objectId
from objects o cross join users u
where o.category = 'A'
union
select u.userId, o.objectId
from users u join userobjects uj on u.userid = uj.userId
     join objects o on uj.objectid = o.objectid
where o.category <> 'A'
order by u.userid,o.objectid desc

--RESULTS
userId  objectId
1       9
1       7
2       9
2       7
3       9
3       7
3       6
于 2013-01-23T15:24:28.480 に答える
0

UNIONなしで、オブジェクトへのLEFT結合と非従来型のINNERJOINを使用してそれを行うことができます。

SELECT DISTINCT u.userid, 
                o.objectid 
FROM   users u 
       LEFT JOIN userobjects uj 
              ON u.userid = uj.userid 
       INNER JOIN objects o 
               ON uj.objectid = o.objectid 
                   OR ( o.category = 'A' ) 
ORDER  BY u.userid, 
          o.objectid DESC 

フィドル

于 2013-01-23T15:30:03.803 に答える