坚持如何进行特定的查询

时间:2014-02-18 20:56:19

标签: mysql subquery

我有三个表,项目,值和属性,它们的结构......

产品

  • ID
  • 标题
  • 递减
  • 时间戳

  • ID
  • ITEMID
  • PROPID

属性

  • ID
  • 名称
  • 递减
  • 时间戳

基本上,通过这种结构,我可以创建一个项目,然后为其分配任何属性或值。但是我遇到了一个如何根据属性和值搜索现有项目的问题。

这样,如果我有一个项目,将一个复合键转储到此,如果它是一个普通的表,我可以“SELECT * FROM items WHERE key1 ='val1'and key2 ='val2'”,但是我无法弄清楚如何使用这种结构模拟这样的搜索。还有其他人有什么想法吗?

这是针对我投入的系统,因此更改表格的布局可能不是我将被允许做的事情。

编辑:我可以将其分解为多个步骤,但考虑到这些数据集的大小,我目前正在考虑的解决方案将会很慢并且可能会变得有点内存密集。

2 个答案:

答案 0 :(得分:0)

我会使用INNER JOIN查询

SELECT *
FROM Items a
INNER JOIN Values b
ON a.id = b.itemID
INNER JOIN Propeties c
ON b.propID = c.id
WHERE c.title = 'height' AND b.value = '55'

现在您可以放置​​任何列表,现在它们都是joine,只需记住根据

将表别名(a,b,c)预先添加到列名称中

答案 1 :(得分:0)

如果要避免连接,可以创建另一个表,其中包含三列Item_Id,Property_Id和Value_Id。在此表中,您可以根据Id搜索任何内容。

OR

你可以这样做:

SELECT * FROM Items WHERE IN (SELECT itemID FROM Values WHERE value=SOMEVALUE)