在mysql上选择查询,根据条件从单个表中选择值

时间:2012-12-13 10:11:58

标签: mysql sql

我有一个带结构的SQL表

CREATE TABLE IF NOT EXISTS `engine4_user_fields_values` (
  `item_id` int(11) unsigned NOT NULL,
  `field_id` int(11) unsigned NOT NULL,
  `value` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`item_id`,`field_id`,`index`)
)

我想选择具有field_id ='17'且值为IN(5,8,7)+ field_id ='20'且值IN(73,76)

的行

我无法像下面给出的那样选择它,因为如果field_id为17则不会是20!

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) AND (field_id ='20' AND value IN(73,76))

如果我们使用OR,那么它将选择满足任何条件的值。

我们可以使用join吗?我不确定代码! 任何人请帮助我获取此

的选择查询

4 个答案:

答案 0 :(得分:1)

从你的描述中听起来你应该将中间的AND改为OR。您希望返回与第一个条件或第二个条件匹配的所有行。字段ID不能是17和20.

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))

答案 1 :(得分:1)

您可以group by项,并使用having子句要求该项目包含符合这两个条件的行:

select  item_id
from    engine4_user_fields_values
group by
        item_id
having  max(case when field_id ='17' and value in (5,8,7) then 1 end) = 1
        and max(case when field_id ='20' and value in (73,76) then 1 end) = 1

答案 2 :(得分:0)

你应该使用OR,但是在两个子条件之间:

SELECT * 
FROM `engine4_user_fields_values` 
WHERE (field_id ='17' AND value IN(5,8,7))
OR (field_id ='20' AND value IN(73,76))

答案 3 :(得分:0)

你正在使用+ for field_id ='17'和值IN(5,8,7)+ field_id ='20'AND值IN(73,76)
所以从技术上讲,不可能同时使用field_id ='17'和field_id ='20' 您需要使用OR代替AND,如下所示

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))