Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 - Fatal编程技术网

MySQL在同一表的相同列上使用和条件选择查询

MySQL在同一表的相同列上使用和条件选择查询,mysql,Mysql,我有一张这样的桌子 itemid | propertyname | propertyvalue ___________|______________|_______________ 1 | point | 12 1 | age | 10 2 | point | 15 2 | age | 11 3 | point |

我有一张这样的桌子

    itemid | propertyname | propertyvalue
___________|______________|_______________
     1     |   point      |  12
     1     |   age        |  10
     2     |   point      |  15
     2     |   age        |  11
     3     |   point      |  9
     3     |   age        |  10
     4     |   point      |  13
     4     |   age        |  11
我需要一个查询来选择年龄大于10岁且分数小于12岁的所有项目

我试过了

`select itemid from table where (propertyname="point" and propertyvalue < 12)
 and (propertyname="age" and propertyvalue >10)`
它没有结果。如何使其工作?

您可以使用内部联接

好的,在表a中,您查找的是名称点和值小于12的所有项目,在表b中,您查找的是名称年龄和值大于10的所有项目。然后您只需查找两个表中的项。为此,可以通过itemid连接两个表。要连接表,请使用连接。希望这能帮助你理解。如果没有,请再次询问:

您可以使用内部联接


好的,在表a中,您查找的是名称点和值小于12的所有项目,在表b中,您查找的是名称年龄和值大于10的所有项目。然后您只需查找两个表中的项。为此,可以通过itemid连接两个表。要连接表,请使用连接。希望这能帮助你理解。如果不再次询问:

要在同一查询中将一个表连接到自身,您可以在FROM子句中包含该表两次,每次都给它一个不同的别名。然后,您只需继续构建查询,就像处理两个恰好包含完全相同数据的独立表一样

在下表的查询中,示例别名为a和b:


要在同一查询中将一个表连接到它自己,可以在FROM子句中包含该表两次,每次都给它一个不同的别名。然后,您只需继续构建查询,就像处理两个恰好包含完全相同数据的独立表一样

在下表的查询中,示例别名为a和b:

请试试这个

select itemid from table where (propertyname="point" and propertyvalue < 12)
 or (propertyname="age" and propertyvalue >10);
请试试这个

select itemid from table where (propertyname="point" and propertyvalue < 12)
 or (propertyname="age" and propertyvalue >10);

可以使用内部联接。这意味着,您将使用两个表:第一个表选择name=age,val>10,第二个表选择name=point,val可以使用内部联接。意思是,这就像你要处理两个表:第一个表你要选择名称=年龄和val>10,第二个表你要选择名称=点和val这里有一个想法

SELECT item_id
     , MAX(CASE WHEN propertyname = 'point' THEN propertyvalue END point
     , MAX(CASE WHEN propertyname = 'age' THEN propertyvalue END age
  FROM a_table
 GROUP
    BY item_id
HAVING age+0 > 10
   AND point+0 < 12;
这里有一个想法

SELECT item_id
     , MAX(CASE WHEN propertyname = 'point' THEN propertyvalue END point
     , MAX(CASE WHEN propertyname = 'age' THEN propertyvalue END age
  FROM a_table
 GROUP
    BY item_id
HAVING age+0 > 10
   AND point+0 < 12;
试试看:

试试看:


如果您提供了一些关于此代码如何工作的解释,这将是一个非常好的答案。@sh88将注释中的解释添加到您的答案中,进行编辑,以防有人忽略注释。如果您提供了一些关于此代码如何工作的解释,这将是一个非常好的答案。@sh88将注释中的解释添加到您的答案中,并对其进行编辑,以防有人忽略注释
SELECT itemid FROM test_table WHERE propertyname="point" AND propertyvalue < 12 AND itemid IN(SELECT itemid FROM test_table WHERE propertyname="age" AND propertyvalue >10)