选择mysql上的查询,根据条件从单个表中选择值
我有一个结构化的sql表选择mysql上的查询,根据条件从单个表中选择值,mysql,sql,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`) ) 我想选
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`)
)
我想选择(5,8,7)中带有字段\u id='17'和值的行+字段\u id='20'和(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吗?我不确定代码!
任何人请帮助我从您的描述中获取此的select查询,听起来您应该更改中间和to或。您希望返回与第一个条件或第二个条件匹配的所有行。字段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))
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))
您应该使用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))
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
您可以
按
项分组,并使用having
子句要求该项具有与两个条件匹配的行:
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))
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
您正在使用+表示(5,8,7)中的字段\u id='17'和值)+字段\u id='20'和(73,76)中的值
因此,从技术上讲,不可能同时具有字段“id='17'和字段“id='20'”
您需要使用或代替和,如下所示