我有三个表,项目,值和属性,它们的结构......
产品
值
属性
基本上,通过这种结构,我可以创建一个项目,然后为其分配任何属性或值。但是我遇到了一个如何根据属性和值搜索现有项目的问题。
这样,如果我有一个项目,将一个复合键转储到此,如果它是一个普通的表,我可以“SELECT * FROM items WHERE key1 ='val1'and key2 ='val2'”,但是我无法弄清楚如何使用这种结构模拟这样的搜索。还有其他人有什么想法吗?
这是针对我投入的系统,因此更改表格的布局可能不是我将被允许做的事情。
编辑:我可以将其分解为多个步骤,但考虑到这些数据集的大小,我目前正在考虑的解决方案将会很慢并且可能会变得有点内存密集。
答案 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)