我需要你的帮助。我必须进行查询,并且只能看到我的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 :(得分: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_id
和block_user_id
)。
您应该使用LEFT JOIN
(如果SELECT
中的第一个表是用户),因为首先您需要选择所有用户;如果您使用INNER JOIN,则不会选择任何没有users_blocked
记录的用户。
完成后,您将过滤掉block_user_id
和request_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