Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择mysql上的查询,根据条件从单个表中选择值_Mysql_Sql - Fatal编程技术网

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

选择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`) ) 我想选

我有一个结构化的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`)
)
我想选择(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'”
您需要使用或代替和,如下所示