当前位置: 首页 > 面试题库 >

需要一个MySQL查询来从存储键值对的表中选择

司马辉
2023-03-14
问题内容

我需要以键值对的形式在数据库(mySQL)中存储一些项目及其属性。我正计划如下。

我将使用两个表itemsitem_properties

items

itemId | 项目名称
-------------------
 1923年| 交流电
 1235 | 冰箱
 8273 | 电暖器

item_properties

itemId | 物业| 值
--------------------------------
 1923年| 效果| 冷却
 1923年| 消费 有效率的
 1923年| 类型 分裂
 1235 | 效果| 冷却
 1235 | 数量 20升
 8273 | 效果| 加热
 8273 | 消费 有效率的
 8273 | heatMethod | 线圈

现在,如果我必须选择“效果”为“冷却”的项目,则可以使用以下查询进行操作(结果将为我提供“ AC”和“冰箱”)。

从项目i,item_properties p中选择itemName 
在哪里i.itemId = p.itemId 
AND(p.property ='effect'AND p.value ='cooling');

我想知道如何编写查询以选择与多个属性匹配的项目,例如

  • 选择“效果”为“冷却”且“消耗”为“有效”的所有项目(与“ AC”项目匹配)。
  • 选择所有“类型”为“ split”或“ heatMethod”为“ coil”或“ consumption”为“ effecient”的物品(将与“ AC”和“ Heater”物品匹配)。

请帮助…预先感谢!


问题答案:

这是查询示例:

SELECT
  itemName
FROM
  items i,
JOIN
  item_properties effect
  ON i.itemId = effect.itemId AND effect.property = 'effect'
JOIN
  item_properties consumption
  ON i.itemId = consumption.itemId AND consumption.property = 'consumption'

WHERE effect.value = 'cooling' AND consumption.value = 'efficient';

我将把oR查询留给您自己尝试的东西。它只是增加更多的表格和使用OR,而不是ANDWHERE



 类似资料:
  • 我有两张调查表。表1包含以下字段发送的调查:SID、SalesRep、位置。表2包含用以下字段返回的调查结果:RID、SID、QID、AID。 在表1中,SID是唯一的,没有重复项。在表2中,RID是唯一的,并且表示被回答的每个问题和答案。表2中的SID代表了回答问题的调查。因此,如果调查中回答了10个问题,表2中将有10行具有相同的SID。 我需要做的是找出每个销售人员已经发送了多少份调查,采取

  • 我现在在大学学习数据库,在我的项目中,我有3个表:、和 联赛(leagueId,leagueName) 团队(teamId,teamName) 具有(leagueId,teamId,year)

  • 问题内容: 我正在运行此查询 但这不是我想要的结果,它返回多行。 我的一张桌子看起来像这个名字: 另一个表看起来像这个名字: 我如何使其选择查询,以便可以从两个表中获取与之相关的所有值,并使它看起来像这样 所需的输出: 谢谢!(提前!) 问题答案: 为您提供所需的输出(但这并不灵活,因此,如果添加要输出的更多详细信息,将无法进行更改而不进行更改):-

  • 问题内容: 我有桌子: 我想写一个返回BookName,FirstName,LastName,RubricName的SELECT查询。 我有两个单独的查询,但我不知道如何在一个选择中编写此查询。这就是我得到的: 它工作正常,但如何在一个选择中编写? 我尝试这样做,但是不起作用: 它返回错误: 问题答案: 试试这个查询

  • 我试图从获取数据。总共有9个表格,我必须相应地从所有表格中显示产品列表。 我考虑过使用连接,并尝试了左连接,如下所示: 这里是主表,pid是从tbl2到tbl9的所有表的。 注意:这里我在所有表上使用了来避免长查询,但是在实际的数据库操作中,只提到特定的列来提高性能。 现在实际的问题是,我没有得到所有的记录从表使用左加入。只检索中对应的每个条目的最后一行。 我使用了GROUP BY来避免重复的左连

  • 我有一个表,其中有多个条目对应一个FK。我想找出没有某些条目的FK值,例如 我的表有以下条目。 现在,我想从这个表中过滤所有没有ab3或ab4的FK。当然,我期望不同的值,即在这种情况下,结果将是FK=100和200。 我使用的查询是 当然,此查询不会获取所需的结果。