日期:2014-05-16  浏览次数:20885 次

具有可变数目的Attribute的Item集合,如何检索含有指定几个Attribute的Item
具有可变数目的Attribute的Item集合,如何检索含有指定几个Attribute的Item

假如有若干产品
电视机 尺寸28,重量20,价格1000
冰箱 长40,宽80,高150,颜色Red
洗衣机 容积50

我将数据库设计成如下结构
SQL code
CREATE TABLE tblItem(lngId COUNTER PK, strName TEXT(10) UNIQUE)
CREATE TABLE tblAttribute(lngId COUNTER PK,strName TEXT(10) UNIQUE)
CREATE TABLE tblItemAttribute(lngIid INTEGER , lngAid Integer)


如何检索出拥有“长”和“重量”的物品??(最好用J-Sql)

============
附,我错误的写法:
SQL code
SELECT tblItem.strName FROM 
((tblItem LEFT JOIN tblItemAttribute ON tblItem.lngId=tblItemAttribute.lngIid)
LEFT JOIN tblAttribute ON tblItermAttribute.lngAid=tblAttribute.lngId)

WHERE tblItermAttribute.strName IN ('长','重量')
结果是检索出拥有“长”或“重量”的物品,而不是有“长”和“重量”的物品
若改成WHERE tblItermAttribute.strName='长' AND tblItermAttribute.strName='重量' ,则返回空

------解决方案--------------------
SQL code
select c.*
from ((tblItemAttribute a1 inner join tblAttribute b1 on a1.lngAid=b1.lngId and b1.strName='长')
    inner join (tblItemAttribute a2 inner join tblAttribute b2 on a2.lngAid=b2.lngId and b2.strName='重量')
    on a1.lngIid=a2.lngIid)
    inner join tblItem c on a1.lngIid= c.lngId