0
我有什么:
表具有两列一每个水果,一个小尺寸,一个大尺寸。SQL:从表1分的结果多行合并2行至一个子查询
id | category | subcategory | title | description | value
-----------------------------------------------------------------
1 | Fruit | Small | Plum | Om, nom, nom! | 0.50
2 | Fruit | Large | Plum | Om, nom, nom! | 1.50
3 | Fruit | Small | Orange | Mmm, citrus. | 0.30
4 | Fruit | Large | Orange | Mmm, citrus. | 0.75
5 | Fruit | Small | Melon | Get in mah belly! | 2.00
6 | Fruit | Large | Melon | Get in mah belly! | 3.10
我需要什么:
我需要两行对每个水果组合成一排:
类,冠军和描述将始终是相同的为每一对行。
ID,子类别和值将永远为每对行的不同。
id.r1 | id.r2 | category.r1 | title.r1 | description.r1 | subcategory.r1 | value.r1 | subcategory.r2 | value.r2
-----------------------------------------------------------------------------------------------------------------------
1 | 2 | Fruit | Plum | Om, nom, nom! | Small | 0.50 | Large | 1.50
3 | 4 | Fruit | Orange | Mmm, citrus. | Small | 0.30 | Large | 0.75
5 | 6 | Fruit | Melon | Get in mah belly! | Small | 2.00 | Large | 3.10
我已经试过什么:
SELECT r1.id,
(SELECT r2.id FROM `my_table` r2 WHERE r1.title = r2.title),
r1.category,
r1.subcategory,
(SELECT r2.category FROM `my_table` r2 WHERE r1.title = r2.title)
r1.title,
r1.description,
r1.value,
(SELECT r2.value FROM `my_table` r2 WHERE r1.title = r2.title)
FROM `my_table` r1
WHERE category = "Fruit"
...主要生产:
子查询返回多个1行
我的问题:
如何修改上述查询以实现我所描述的内容?
感谢您选择解决方案和每个解释。解决方案1:这很好。我明白你的意思是关于子类别。子类别的值是在ID和值的列标题中表示的。解决方案2:我无法正确直观地确认它是否有效以及生成的行是否相同。应该“水果”(类别值)不是“我的表”(表的名称)还是我的方式离开的标志?此外,是省略号(...)功能还是我假设其他列将被添加?非常感谢您的帮助。 – 2013-04-22 19:21:07
@DominorNovus。 。 。我把桌子叫做'水果',但是我只是用'my_table'替换了你的问题。这是否解决您的问题? – 2013-04-22 19:23:47
是的,谢谢。我修改了第二个解决方案的列选择,并在查询结尾处添加了WHERE条件。最终结果与第二种解决方案产生了完全相同的记录量。修改后的代码:http://pastebin.com/1BDfWbC9 – 2013-04-22 19:40:43