2017-06-01 9 views
2
Table : user 
Id name 
1 a 
2 b 
3 c 
4 d 

Table : block_user 
id block_by block 
1 1   2 

私は、リスト内のユーザー2を望んでいないが、私は、クエリで立ち往生し、その時点で利用者1のためのリストを取得: 私はそれの代わりに、ユーザ3、4をしたいがユーザーがブロックしているユーザーのリストを一覧に表示したくないのですか?

をブロックされたユーザー2を返します

私のSQLのフィドルFiddle hereと私の現在のクエリ

Select u.* from user u JOIN block_user bu on bu.block_by = u.Id or bu.block = u.Id where u.Id != 1 GROUP BY u.Id 
+1

互換性のないデータベースタグを削除しました。使用しているデータベースのみにタグを付けてください。 –

答えて

1

を助けるこの希望は非常にソートここではない

select * from user where id NOT IN (select block from block_user) 
1

は、私はあなたがnot existsleft joinをしたいと思います。正しい論理は次のとおりです。

select u.* 
from user u 
where u.id <> 1 and 
     not exists (select 1 
        from block_users bu 
        where bu.block_by = 1 and bu.block = u.id 
       ); 
+0

私のためにあなたの答えのためにありがとう、申し訳ありませんが、私は評判がないので投票できません。おかげで再び –

-1

使用は、それはあなたもこれを使用することができ、あなたに

select * from user where id = 1 AND id NOT IN 
(select GROUP_CONCAT(block) from block_user where block_by = 1) 
+0

あなたはすべてのユーザーのための出力を提供しているが、彼は一人のユーザのために望んでいるとあなたがそうOK –

+0

によってグループが欠落している今、彼は時 –

+0

で1つのレコードを取得することができますまだそれはGROUP_CONCAT –

1

使用中に入れ子にクエリを使用することができます代わりにテーブルに参加する必要はありません。

select * from user where id != 1 and id NOT IN (select block from block_user WHERE block_user.block_by = 1) 
+1

これは返されているユーザーです1 –

+0

あなたの答えをありがとう、申し訳ありませんが、私は評判がないので、再度、感謝します –

関連する問題