我有一个非常大的数据集,我正在尝试进行LEFT外连接,但由于我放置WHERE命令的位置,我一直在丢失一些左表行,类似于问题和解决方案here 。
示例1
SELECT *
FROM table1
LEFT JOIN table2
USING (IDvar)
WHERE table2.var IN(val1, val2,..., val100);
这只选择第一个/左表(table1)中第二个/右表(table2)中具有匹配行的行。第二个例子是可能起作用的:
示例2
SELECT *
FROM table1
LEFT JOIN table2
USING (IDvar)
AND (table2.var = val1 OR table2.var = val2);
但是,我想要包含200个table2.var
值,这些值是偶发的且非连续的(不能使用像table2.var >= val1
这样的语法)。
我认为应该工作的一个例子是使用" AND"和" IN"例如(因为我将值作为以逗号分隔的列表):
示例3
SELECT *
FROM table1
LEFT JOIN table2
USING (IDvar)
AND table2.var IN(val1, val2,..., val100);
那么如何在AND命令中获得许多值?
我找到了一个有效的解决方案,但它需要很长时间才能完成。
示例4 - 工作示例但耗时太长
SELECT *
FROM table1
LEFT JOIN (SELECT table2.var WHERE table2.var IN(val1, val2,..., val100)) AS t
USING (IDvar);
有没有办法优化这个查询,它花了太长时间?