mysql JOIN with WHERE IN子查询不识别WHERE(不缩小结果)

eiee3dmh  于 2023-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(177)

我尝试使用表的联接进行选择,然后使用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一起工作,它只是不与子查询一起工作。
救命啊

vfhzx4xs

vfhzx4xs1#

问题似乎在于WHERE子句中的子查询的用法。要根据子查询排除某些结果,可以使用LEFT JOIN沿着NULL值。

SELECT * FROM table1
LEFT JOIN table2 ON table1.var = table2.var
WHERE table1.var NOT IN (
SELECT var
FROM table3
WHERE var IN (SELECT var FROM table4)
)
6rqinv9w

6rqinv9w2#

根据您的查询,我认为您希望通过var组合表1,表2和表3中的数据,但不存在于表4中。如果这就是你想要的,试试这个:

SELECT t1.*, t2.*, t3.*
FROM table1 t1
INNER JOIN table2 t2 on t1.var = t2.var
INNER JOIN table3 t3 on t1.var = t3.var
LEFT JOIN table4 t4 on t3.var = t4.var
WHERE t4.var is null
llew8vvj

llew8vvj3#

我无法得到任何一个提供的解决方案的工作。我解决了这个问题。
问题似乎是,无论何时我从任何连接的表中选择 *。因此,从@SelVazi解决方案导出的这个版本不起作用/过滤器:

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))

从任何一个连接的表中添加 * 也不起作用(过滤器),例如:

SELECT table1.*, table2.*, table3.somevar 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))

解决方案:过滤器的作用是从第一个表中选择 *,然后从连接的表中选择其他名称的特定列,例如:

SELECT table1.*, table2.somevar, table3.somevar2, table3.somevar3 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))

从两个连接的表(INNER JOINed或LEFT JOINed表)中的一个或两个中添加所有列的选择似乎覆盖了JOIN的过滤。在进一步处理这个问题时,我意识到正是在select for a joined table中选择连接列(在本例中为var)才导致了这个问题。因此,这不起作用(过滤器):

SELECT table1.*, table2.var, table3.somevar2, table3.somevar3 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的工作方式。也许有人可以解释一下。我还应该注意到,var在数据库的table 1、table 2、table 3和table 4中具有相同的名称。我想知道这是否会导致这个问题。

相关问题