我有一个名为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;服务器。
任何建议都将不胜感激。
答案 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。