我在Oracle中有这样的SQL查询:
SELECT p.item_id, c.title
FROM product p
JOIN category c ON (p.item_id = c.item_id)
WHERE p.status = 'active';
这给我这样的行:
p.item_id | c.title
现在,假设我有另一个带有标签的表,每行一个标签,但我知道每个产品只有两个。说清楚:
title | item_id
'Some tag' | 1
'Another tag' | 1
'Tag for another product' | 2
我需要这样的输出:
p.item_id | c.title | t.tag_1 | t.tag_2
所以在这种情况下:
'Some product' | 'My category' | 'Some tag' | 'Another product'
当我加入tag
表时,我不知道怎么说我希望第一个结果成为一列而第二个成为另一列。谢谢你的建议。
答案 0 :(得分:0)
因为您有两个,所以您可以使用min()
和max()
轻松完成此操作:
SELECT p.item_id, c.title, min(t.title) as tag1, max(t.title) as tag2
FROM product p JOIN
category c
ON p.item_id = c.item_id JOIN
tags t
ON p.item_id = t.item_id
WHERE p.status = 'active'
GROUP BY p.item_id, c.title;
答案 1 :(得分:0)
Gordon Linoff为您提供了一个很好的解决方案。 但是,如果你有超过2个,你将需要更大的东西:
select item, max(title1), ..., max(titleN) from (
select item_id,
decode(nom, 1, title, null) title1,
....
decode(nom, N, title, null) titleN
from (
select item_id, title, row_number() over (partition by item_id order by title) nom
from category)
)
然后将其加入产品以获得所需的输出。
如果您不仅需要在oracle中运行它,请使用CASE替换decode。