可以使用IN()来查找INTERSECT

时间:2011-12-16 14:00:27

标签: mysql

当我使用

SELECT * FROM table WHERE column IN (1, 2, 3, 3, ..., 1000)

它被视为

... WHERE column = 1 OR column = 2 OR ... OR column = 1000

但我想要这个

... WHERE column = 1 AND column = 2 AND ... AND column = 1000
列中的

有id参数。有没有一种简单的方法可以解决这个问题?

有可能,因为它是与m:n关系的表。一种产品可以有许多参数。

CREATE TABLE IF NOT EXISTS `productparametervalues` (
`f_product_id` int(11) NOT NULL AUTO_INCREMENT,
`f_parameterValue_id` int(11) NOT NULL,
PRIMARY KEY (`f_product_id`,`f_parameterValue_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

2 个答案:

答案 0 :(得分:4)

编辑:修改了我的答案,以匹配添加到问题中的表格架构。

您可以使用GROUP BY / COUNT DISTINCT来实现此目的。在HAVING COUNT上测试的值应该等于IN子句中包含的项目数。

SELECT f_product_id
    FROM productparametervalues
    WHERE f_parameterValue_id IN (1, 2, 3, ..., 1000)
    GROUP BY f_product_id
    HAVING COUNT(DISTINCT f_parameterValue_id) = 1000;

答案 1 :(得分:0)

不,这是不可能的。

没有语法可以做到这一点,因为该子句总是评估为FALSE;一个字段怎么可能有这样的多个值?