Как отобразить запрос определенным образом? - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я новичок в запросах, и ниже у меня есть запрос, который я сделал QUERY:

select TITLE_ID, TITLE,NAME, JOB_CATEGORY AS ROLE
FROM MOVIES
NATURAL JOIN NEW_NAMES
WHERE JOB_CATEGORY = 'writer'
OR JOB_CATEGORY = 'director'
ORDER BY TITLE_ID ASC;

, который отображает:

TITLE_ID | TITLE | NAME | ROLE    |
753595   | 2F2F  | ROB  | WRITER  |
753595   | 2F2F  | YAS  | DIRECTOR|

Однако я бы хотел, чтобы он отображался в этом формате ниже:

TITLE_ID | TITLE | WRITER | DIRECTOR|
753595   | 2F2F  | ROB    | YAS     |

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Согласно полученному сообщению об ошибке, оно составляет Oracle, а не MySQL.

В любом случае, такой (класс c?) Принцип должен работать: совокупность!

SQL>   with
  2  -- sample data
  3  movies (title_id, title_name) as
  4    (select 753595, '2F2F' from dual union all
  5     select 123456, '1Z1Z' from dual
  6    ),
  7  new_names (title_id, job_category, name) as
  8    (select 753595, 'writer', 'ROB' from dual union all
  9     select 753595, 'director', 'YAS' from dual
 10    )
 11  -- query you need
 12  select m.title_id,
 13    m.title_name,
 14    max(case when n.job_category = 'writer' then n.name end) as writer,
 15    max(case when n.job_category = 'director' then n.name end) as director
 16  from movies m left join new_names n on m.title_id = n.title_id
 17  group by m.title_id, m.title_name
 18  order by m.title_id;

  TITLE_ID TITL WRI DIR
---------- ---- --- ---
    123456 1Z1Z
    753595 2F2F ROB YAS

SQL>
0 голосов
/ 30 марта 2020

Вы присоединяетесь к вашему столу NEW_NAMES дважды. Один раз для директора, один раз для writer. Когда вы присоединяетесь к столу более одного раза, необходимо присвоить ему псевдоним, здесь мы используем writer и director.

select TITLE_ID, TITLE,writer.NAME as writer_name, director.NAME as director_name
FROM MOVIES
LEFT OUTER JOIN NEW_NAMES as writer
     ON MOVIES.TITLE_ID = writer.TITLE_ID
     AND  writer.JOB_CATEGORY = 'writer'
LEFT OUTER JOIN NEW_NAMES as director
     ON MOVIES.TITLE_ID = director.TITLE_ID
     AND director.JOB_CATEGORY = 'director'    
ORDER BY TITLE_ID ASC;

В этих ON предложениях я сделал некоторые предположения о том, к каким столбцам в ваших таблицах вы присоединяетесь. Возможно, вам придется отредактировать это.

...