查询用户被阻止

时间:2013-08-05 10:02:32

标签: mysql sql

我需要你的帮助。我必须进行查询,并且只能看到我的id 1不存在于users_blocked表中的人。

我试过这样:

SELECT 
U.first_name, U.sex, U.age, U.id, UB.request_user_id, UB.block_user_id
FROM users U, users_blocked UB
WHERE U.sex <> 'm'
AND NOT (UB.request_user_id = U.id AND UB.block_user_id = 1)

但它不起作用

如何在桌面用户上看到正常记录32?

Table: users

id  | first_name  | sex | age
1   | Mark        | m   | 32
2   | Alice       | f   | 26
23  | Lory        | f   | 24
32  | Jenny       | f   | 25


Table: users_blocked

id | request_user_id | block_user_id
1  | 2               | 1
2  | 23              | 1

4 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想要搜索block_user_id不等于1的所有记录,并且两个表中都有记录。 Mat是这个下面提到的查询将帮助你

试试这个:

SELECT 
    U.first_name, U.sex, U.age, U.id, UB.request_user_id, UB.block_user_id
FROM users U
INNER JOIN users_blocked UB ON U.id = UB.block_user_id
WHERE U.sex <> 'm' AND UB.block_user_id != 1

答案 1 :(得分:0)

Select * from users u join users_blocked ub on u.id = ub.request_user_id where u.sex <> 'm' and ub.block_user_id != 1

答案 2 :(得分:0)

可能

SELECT u.id FROM users u 
INNER JOIN users_blocked ub ON u.id = ub.request_user_id
WHERE u.sex <> 'm' and ub.block_user_id <> 1

答案 3 :(得分:0)

如果我理解正确,您需要加入users两次users_blocked,因为您希望使用两个不同的列加入(因为您希望用户在user_blocked中没有记录,任何一个这些列:request_user_idblock_user_id)。

您应该使用LEFT JOIN(如果SELECT中的第一个表是用户),因为首先您需要选择所有用户;如果您使用INNER JOIN,则不会选择任何没有users_blocked记录的用户。

完成后,您将过滤掉block_user_idrequest_user_id均为NULL的所有记录。我建议您在没有WHERE子句和SELECT *的情况下运行查询,以更清楚地了解其工作原理(以及原因)。

SELECT * 
FROM users u 
LEFT JOIN users_blocked blocked ON blocked.block_user_id = u.id
LEFT JOIN users_blocked requester ON requester.request_user_id = u.id
WHERE blocked.block_user_id IS NULL AND requester.request_user_id IS NULL