0

テーブル:

        users: id INT

        items: id INT
               setid INT

         sets: id INT

relationships: userid INT
               itemid INT
               relationship ENUM('owner', 'participant')

auseridと asetidを指定すると、セット内のすべてのアイテムのリストと、関係が存在する場合は各アイテムに対するユーザーの関係を生成する必要があります。つまり、結果は

setid    itemid   relationship
---------------------------------
1        1        NULL
1        2        owner
....

次の句は、2 番目の句が nullのwhere行を除外するため、機能しません。relationship

select
    sets.id as setid,
    items.id as itemid,
    relatonships.relationship as relationship

from sets
    inner join items on sets.id = items.setid 
    left join relationships on relationships.itemid = items.id

where
    sets.id = 5
    and relationships.userid = 27

ただし、2 番目のwhere句は、その項目と特定のユーザーの間に既存の関係がない行を除外します。単一のクエリでこれを行うにはどうすればよいですか?

4

2 に答える 2

1

それは非常に単純で、「join...on」句の定数に対してテストできることを理解していませんでした。

select
    sets.setid,
    items.itemid,
    relationships.relationship

from sets
    inner join items on items.setid = sets.id
    left join relationships
        on relationships.itemid = items.id
        and relationships.userid = 5
where
    sets.id = 1
于 2009-11-16T01:36:20.120 に答える
0

あなたが求めていることは100%ではありません。これを試してみてください

select
    sets.id as setid,
    items.id as itemid,
    relatonships.relationship as relationship

from sets
    inner join items on sets.id = items.event 
    LEFT join relationships on relationships.itemid = items.id

where
    sets.id = [say, 5]
    and relationships.userid = [say, 27]

存在しない場合、関係列は NULL になることに注意してください。また、WHERE 句の関係参照によって、行も削除される可能性があります。これで始められることを願っています。繰り返しますが、あなたが達成しようとしていることを誤解している可能性があります。テーブルの設計から、ユーザーとセットの間に関係がないように見えます。テーブル内のフィールドのリストである可能性があります。

次のクエリを試してください。

select sets.id as setId,
       items.id as ItemId,
       relationships.relationship
from sets
    join users on 1=1
    join items on sets.id=items.setid
    left join relationships on relationships.itemId = items.id
where 
    sets.id=5 and users.id = 27

users テーブルを 1=1 の結合に追加することで、関係テーブルを参照する where 句はまったく必要ありません

左結合を次のように変更します。

left join relationships on relationships.itemId = items.id 
AND relationships.userId=users.id
于 2009-11-16T00:29:22.433 に答える