2011-12-16 51 views
0

当我使用可以使用IN()来查找INTERSECT

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 ; 
+0

我的回答并没有考虑到你正在寻找与制约因素的行必须出现在结果为_all_这些值的`或`解决方案的可能性;是这样吗?你能澄清你的问题吗?用你自己承认的代码示例来解释你想要做什么并不能达到这个目标是非常没用的! – 2011-12-16 14:03:59

+0

这是无稽之谈 - 你期待使用'WHERE column = 1 AND column = 2 AND ... AND column = 1000'? – 2011-12-16 14:10:07

+0

我期待有选择参数的产品。为什么这是无稽之谈? – tomasr 2011-12-16 14:15:00

回答

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; 
0

不,这是不可能的。

没有语法来做到这一点,因为子句总是计算为FALSE;一个领域怎么会有这样的多个值?

相关问题