Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询困难_Sql_Postgresql - Fatal编程技术网

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)"));