我有一个名为website
的表,其中包含一些关于网站的数据。该表的列为:id、网站、quick_url、user_id、状态等。
表中的每个网站都是由用户添加的,保存在user_id列中。
我有另一个名为blocks
的表,它只有3列:id, user_id, website_id
。
我想从website
表中获取所有未被给定user_id添加的网站,但也只获取未被给定用户_id阻止的网站。因此,那些不是由特定用户添加或屏蔽的网站。
以下是我尝试过的:
SELECT * FROM website LEFT OUTER JOIN blocks ON tbl_website.userid = blocks.user_id WHERE website.user_id = blocks.user_id AND blocks.user_id = NULL AND website,user_id != '177' LIMIT 500;
它没有给我想要的结果。。。
首先,我试着这样做:
SELECT * FROM tbl_website WHERE id<>(SELECT website_id from tbl_website_blocks WHERE user_id = '177')
这对我来说比以前的查询更有意义,但我得到了这个错误:子查询返回的超过1行
我想在SQL查询中不能有"循环中的循环"。
我知道我可以做两个查询,并过滤结果,但我希望尽可能多地使用SQL语言,这样我就不会"过载"服务器。
如有任何建议,我们将不胜感激。
在第二个查询中重写上的条件
WHERE id not in (SELECT website_id from.....)
使用<>
,您可以将其与一个值进行比较,但您的选择返回值列表,因此您可以使用not in
来获得与所选ID列表不同的结果
不是'<>',尝试"不在"
SELECT * FROM tbl_website
WHERE id Not In (SELECT website_id from tbl_website_blocks WHERE user_id = '177')
我还应该补充一下,这个查询不是Join。