SQL查询困难
我有两张桌子,像:SQL查询困难,sql,postgresql,Sql,Postgresql,我有两张桌子,像: id_image id_things url_image id_type_image 1 1 photo.jpg 1 2 1 sketch.jpg 2 3 2 324532.pdf 3 4 3 345323.pdf 3 以及: 我想要这个查询结果: id_
id_image id_things url_image id_type_image
1 1 photo.jpg 1
2 1 sketch.jpg 2
3 2 324532.pdf 3
4 3 345323.pdf 3
以及:
我想要这个查询结果:
id_things url_image(photo) url_image(sketch)
1 photo.jpg sketch.jpg
2 NULL NULL
3 NULL NULL
如何执行查询以获得结果?尝试此查询:
select
e.id_thing,
(select i.url_image from image i where i.id_thing = e.id_thing and i.id_type_image = 1) as photo,
(select i.url_image from image i where i.id_thing = e.id_thing and i.id_type_image = 2) as sketch,
(select i.url_image from image i where i.id_thing = e.id_thing and i.id_type_image = 3) as datasheet
(
select distinct
i.id_thing
from image i
) e
解决了!!结果:
select id_things, (select url_image from image ii where id_type_image = 1 and ii.id_things = i.id_things) as photo, (select url_image from image ii where id_type_image = 2 and ii.id_things = i.id_things) as sketch from image i
group by id_things
order by id_things
谢谢你@Abihabi87你给我指路了 我想Pivot会解决你的问题
WITH table_1 AS
(SELECT 1 id_image, 1 id_things, 'photo.jpg' url_image, 1 id_type_image
FROM DUAL
UNION
SELECT 2 id_image, 1 id_things, 'sketch.jpg' url_image, 2 id_type_image
FROM DUAL
UNION
SELECT 3 id_image, 2 id_things, '324532.pdf' url_image, 3 id_type_image
FROM DUAL
UNION
SELECT 4 id_image, 3 id_things, '345323.pdf' url_image, 3 id_type_image
FROM DUAL),
table_2 AS
(SELECT 1 id_type_image, 'photo' description
FROM DUAL
UNION
SELECT 2 id_type_image, 'sketch' description
FROM DUAL
UNION
SELECT 3 id_type_image, 'datasheet' description
FROM DUAL)
SELECT *
FROM (SELECT id_things, y.description, x.url_image
FROM table_1 x JOIN table_2 y ON x.id_type_image = y.id_type_image
)
pivot (
min(url_image)
for description in
('photo' "url_image(photo)",'sketch' "url_image(sketch)"));
数据表怎么了?请描述一下结果背后的逻辑,我看不到。到目前为止,你有没有提出一些疑问?@Franki,我们不是来帮你做作业的。提及你迄今为止所做的事情,并解释你的困境。在问这样的问题之前,先在谷歌上搜索一下,试着自己去做。我已经试了3个小时了。我是stuckselect id_things,max(url_image)作为照片,min(url_image)作为来自图像I的草图,其中id_type_image=1或id_type_image=2按id_things分组谢谢,但不返回我要查找的结果
WITH table_1 AS
(SELECT 1 id_image, 1 id_things, 'photo.jpg' url_image, 1 id_type_image
FROM DUAL
UNION
SELECT 2 id_image, 1 id_things, 'sketch.jpg' url_image, 2 id_type_image
FROM DUAL
UNION
SELECT 3 id_image, 2 id_things, '324532.pdf' url_image, 3 id_type_image
FROM DUAL
UNION
SELECT 4 id_image, 3 id_things, '345323.pdf' url_image, 3 id_type_image
FROM DUAL),
table_2 AS
(SELECT 1 id_type_image, 'photo' description
FROM DUAL
UNION
SELECT 2 id_type_image, 'sketch' description
FROM DUAL
UNION
SELECT 3 id_type_image, 'datasheet' description
FROM DUAL)
SELECT *
FROM (SELECT id_things, y.description, x.url_image
FROM table_1 x JOIN table_2 y ON x.id_type_image = y.id_type_image
)
pivot (
min(url_image)
for description in
('photo' "url_image(photo)",'sketch' "url_image(sketch)"));