Есть ли способ объединить одну и ту же таблицу дважды с разными операторами WHERE и создать два новых поля? - PullRequest
2 голосов
/ 08 мая 2019

Я хотел бы знать, возможно ли создать левое объединение дважды для одной и той же таблицы с различными инструкциями where в них, которые создают новый столбец, так что данные возвращают 1 строку на ID.Пример данных ниже:

ID | Title | 
123|    1  |
123|    2  |
321|    1  | 
321|    2  |

Я пытался запустить этот код, но он выдает ошибку

Простите, я новичок в SQL и не уверен, что даже собираюсь сделать этоверно, но вот что я пытался сделать:

select c.ID, Title1, Title2
From c
left join (select b.title "title1"
from titles b
where title='1' and c.ID=b.ID)
left join (select b.title "title2"
from titles b
where title='2' and c.ID=b.ID)

Желаемый вывод

ID | Title1| Title2 |
123|    1  |  2     |
321|    1  |  2     |

Ответы [ 4 ]

0 голосов
/ 08 мая 2019

Не уверен, как это сделать с помощью ЛЕВОГО СОЕДИНЕНИЯ, но вы можете сделать это довольно легко с ВНУТРЕННИМ СОЕДИНЕНИЕМ.

SELECT a.ID, a.Title, b.Title
FROM (
  SELECT ID, Title 
  FROM a
  WHERE Title=1
  ) a
INNER JOIN (
  SELECT ID, Title 
  FROM b
  WHERE Title=2
  ) b
ON a.ID = b.ID

Вам нужен способ объединения ваших подзапросов, который требует, чтобы вы сохраняли поле ID в каждом из подзапросов, чтобы его можно было использовать в условии JOIN.

0 голосов
/ 08 мая 2019

Вы можете использовать 2 псевдонима для одной и той же таблицы

select a.ID, a.Title Title1, b.Title Title 2 
from titles a 
inner join  title b on a.id = b.id  and a.Title = 1 and b.title = 2 
0 голосов
/ 08 мая 2019

Если вы действительно хотите сделать это, используя left join:

select a.ID, Title1, Title2
From a left join
     titles t1
     on a.id = t1.id and t1.title = '1' left join
     titles t2
     on a.id = t2.id and t2.title = '2' ;

Неясно, что вы используете для join ключей между таблицами.

0 голосов
/ 08 мая 2019

Вы можете использовать

select ID, min(title) as title1, max(title) as title2
  from titles 
 group by ID
...