我尝试使用表的联接进行选择,然后使用where排除一些结果,如下所示:
SELECT * FROM table1
LEFT JOIN table2 ON table1.var = table2.var
WHERE
table1.var IN (select var from table3 WHERE var NOT IN (SELECT var FROM table4))
这样不行JOIN正在工作,但WHERE子查询的结果没有减少。我尝试将WHERE变量改为WHERE变量等于一个不匹配的值。已成功将结果筛选为0。因此,JOIN与WHERE一起工作,它只是不与子查询一起工作。
救命啊
3条答案
按热度按时间vfhzx4xs1#
问题似乎在于WHERE子句中的子查询的用法。要根据子查询排除某些结果,可以使用LEFT JOIN沿着NULL值。
6rqinv9w2#
根据您的查询,我认为您希望通过var组合表1,表2和表3中的数据,但不存在于表4中。如果这就是你想要的,试试这个:
llew8vvj3#
我无法得到任何一个提供的解决方案的工作。我解决了这个问题。
问题似乎是,无论何时我从任何连接的表中选择 *。因此,从@SelVazi解决方案导出的这个版本不起作用/过滤器:
从任何一个连接的表中添加 * 也不起作用(过滤器),例如:
解决方案:过滤器的作用是从第一个表中选择 *,然后从连接的表中选择其他名称的特定列,例如:
从两个连接的表(INNER JOINed或LEFT JOINed表)中的一个或两个中添加所有列的选择似乎覆盖了JOIN的过滤。在进一步处理这个问题时,我意识到正是在select for a joined table中选择连接列(在本例中为var)才导致了这个问题。因此,这不起作用(过滤器):
这不是我所理解的JOIN的工作方式。也许有人可以解释一下。我还应该注意到,var在数据库的table 1、table 2、table 3和table 4中具有相同的名称。我想知道这是否会导致这个问题。