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)