2013-08-05 149 views
1

我需要你的帮助。我必须做一个查询,并查看我的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 

回答

0

如果我明白你的问题吧,你要搜索的所有记录,其中block_user_id不等于1和记录存在于两个表。垫是这个下面提到的查询将帮助您

试试这个:

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 
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 
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 
0

如果我理解正确的话,你需要加入usersusers_blocked两次,因为您想要使用两个不同的列进行连接(因为您希望在users_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