SQL Join无法弄明白

时间:2015-04-03 14:32:57

标签: php mysql sql join

我有一个名为website的表,其中包含一些有关网站的数据。该表的列是:id,website,quick_url,user_id,status等。

表中的每个网站都是由用户添加的,该网站保存在user_id列中。

我有另一个名为blocks的表,其中只有3列:id, user_id, website_id

我希望从website表中获取未由给定user_id添加的所有网站,但也只包含未被给定user_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行

我猜你在循环中没有&#34;循环&#34;在SQL查询中。

我知道我可以做两个查询,并过滤结果,但我想尽可能多地从SQL语言中做到这一点,这样我就不会超载&#34;重载& #34;服务器。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

在第二个查询中重写

上的条件
WHERE id not in (SELECT website_id from.....) 

使用<>您只能将其与一个值进行比较,但您的选择会返回值列表,因此您可以使用not in获取与所选ID列表不同的结果

答案 1 :(得分:1)

而不是&#39;&lt;&gt;&#39;,请尝试“不在&#39;

SELECT * FROM tbl_website 
WHERE id Not In (SELECT website_id from tbl_website_blocks WHERE user_id = '177')

我还应该添加此查询不是Join。