SQL Join可以';我想不通


SQL Join can't figure it out

我有一个名为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。