select * from items as i join item_types it on it.itemnumber = (
select itemnumber from item_types as it2 join item_index_info as iii on it2.itemnumber=iii.parent and it2.`type` ='ELECTRONICS' AND it2.`value`='TELEVISIONS'
AND iii.child=i.itemnumber order by iii.`index` limit 1);
因此表格具有以下结构:
1.items有列:
itemnumber, availability, quantity, parent
2.item_types有列:
id, itemnumber, type, value
3.item_index_info有列:
parent, child, index
(在此表中,父级也可以是其他项目的子级)
使用上面的查询我想获取所有易于查找的特定类型的项目,但棘手的部分是item_type可能与每个和 每个孩子所以有时候会说孩子可能没有item_index_column中的任何条目但是它的父级可能(这就是为什么我们有第二个查询但是我们必须将它限制为1 遗憾的是,孩子可能有多个级别的父母,即索引,所以我们必须找到在item_types表中有条目的第一个父母(最低索引))
如果我遗漏任何信息,请告诉我。
P.S。在上面的查询中,我得到一个错误,说i.itemnumber未知列我猜是因为我试图从外部查询访问表。
项
itemnumber availibility quantity parent
item001 y 10 item99
item002 y 10 item65
item003 y 10 item012
item004 y 10 item67
item005 y 10 item006
item006 y 10 item43
item007 y 10 item87
item008 y 10 item57
item009 y 10 item89
item010 y 10 item33
item011 y 10 item68
item012 y 10 item34
item99 y 10 item560
item560 y 10 item1234
ITEM_TYPE已
id itemnumber type value
1 item011 Electronics xyz1
2 item56 A xyz2
3 item012 B xyz3
4 item67 C xyz4
5 item006 D xyz5
6 item87 E xyz6
7 item57 F xyz7
8 item89 G xyz8
9 item33 H xyz9
10 item68 I xyz010
11 item34 J xyz011
12 item560 Toys xyz012
13 item1234 Gels xyz013
item_index_info
parent child index
item99 item001 0
item560 item001 1
item1234 item001 2
item560 item99 0
item1234 item560 0
item002 item65 0
item003 item012 0
item003 item34 1
item012 item34 0
item004 item67 0
item006 item005 0
有几点需要注意: 1.第一张桌子上的父母也是同一张桌子上的孩子: 例如item012是行号no:3中的父项,但行号no:12中的子项(但不一定是)
所有孩子或父母可能没有item_types中的条目 例如item99在第二个表中没有条目(它的父母也是孩子)
现在,表3保持了关系的深度,例如:看看记录no.1 item001是item99的直接子项,所以索引0 但是item560的间接子,所以索引1以及item1234的间接子作为item560是item1234的子,所以第3记录有索引2 对于所有的孩子和父母来说等等。即使作为项目父项的item560也有父母,所以它也会在表格中有一个条目
好了,现在我想通过查看每个项目来查询属于“玩具”的所有项目,但是item001没有条目 第二个表现在将选择其父类别。但是我们在第三个表中遇到的第一个父母我们必须停在那里(最低指数)
因为你可以看到第二个表中的最后一个记录有item1234,它有类别'Gels'。 item1234是item560的父级但仍然有 不同的项目类型因此对于item99,我们必须停在最低的索引,即我们找到并继续前进的item560直接父级。
所以这里是序列,对于item001,我们没有在表2中找到一个条目,所以我们选择第一个父项,即item99,它也没有条目 表2所以我们移动了第三个父级并找到了表2中的记录,所以我们停在那里
另一个例子:对于item005,表2中没有条目,所以我们在索引0处移动到父item006,我们在表2中找到条目,所以我们在这里停止
答案 0 :(得分:1)
如果我理解你,就像这样。但我还没试过呢
select in.itemnumber, in.quantity
join item_types it on it.itemnumber=in.itemnumber
where it.type = "Toys"
union
select in.itemnumber, in.quantity
join item_index_info io on io.child=in.itemnumber
join item_types it on it.itemnumber=io.oparent
where it.type = "Toys"
我建议让查询的每个部分都有效,然后使用 union