MySQL:选择具有许多AND / OR条件的查询

时间:2018-03-26 04:36:00

标签: mysql select left-join where-clause

我有一个非常大的数据集,我正在尝试进行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);

有没有办法优化这个查询,它花了太长时间?

0 个答案:

没有答案