SQL Получить конкретные столбцы из одной таблицы и все строки из объединенной таблицы в одном запросе - PullRequest
1 голос
/ 19 октября 2010

Возможно, об этом спрашивали раньше, и я просто не могу его найти.

У меня есть отношение один ко многим в базе данных на нескольких таблицах.

  • table1
  • table2
  • table3

table2 - table3 - это отношение 1-много

вот пример того, что у меня есть:

select
table1.id
table1.Column
table2.Column2
-- I want all entries here from table 3 here as well
From table1 t1
left outer join table2 t2 on t2.ID = t1.ID
left outer join join table3 t3 on t3.ID2 = t2.ID2

Можно ли также выбрать все записи, которые принадлежат таблице 3 в этом запросе, без указания подзапроса в операторе выбора?

Кроме того, это выглядит правильно?Как я уже говорил в прошлом, я действительно новичок в SQL, поэтому мой отстойный код ...

EDIT

Извините, ребята, я ошибся.Мне нужен один столбец из каждой строки, которая должна быть в table3

select
table1.id,
table1.Column,
table2.Column2,
-- I'm going to need a subquery here aren't I...?
table3.columnFromRrow1,
table3.columnFromRrow2,
table3.columnFromRrow3
From table1 t1
left outer join table2 t2 on t2.ID = t1.ID
left outer join join table3 t3 on t3.ID2 = t2.ID2

Ответы [ 3 ]

2 голосов
/ 19 октября 2010
;WITH cte AS
     ( SELECT table1.t1id,
              table1.t1col,
              table2.t2col,
              table3.t3col,
              ROW_NUMBER() OVER (PARTITION BY t1id,t1col,t2col 
                                 ORDER BY table3.id) AS RN
     FROM     table1 t1
              LEFT OUTER JOIN table2 t2
              ON       t2.ID = t1.ID
              LEFT OUTER JOIN
              JOIN table3 t3
              ON       t3.ID2 = t2.ID2
     )
SELECT 
   t1id,
   t1col,
   t2col,
   MAX(CASE WHEN RN=1 THEN t3col END) AS columnFromRrow1,
   MAX(CASE WHEN RN=2 THEN t3col END) AS columnFromRrow2,
   MAX(CASE WHEN RN=3 THEN t3col END) AS columnFromRrow3
FROM cte
WHERE RN<=3
GROUP BY t1id,t1col,t2col
1 голос
/ 19 октября 2010

Я изменил (и исправил ваш запрос, чтобы сделать то, что вы хотите).

SELECT 
  table1.id,
  table1.Column,
  table2.Column2, 
  table3.* -- All columns from table3
FROM table1 AS t1 
     LEFT OUTER JOIN table2 AS t2 
       ON t2.ID = t1.ID 
     LEFT OUTER JOIN table3 AS t3 
       ON t3.ID2 = t2.ID2 

ПРИМЕЧАНИЕ. Этот ответ больше не действителен, поскольку первоначальный вопрос был изменен ...

0 голосов
/ 19 октября 2010

Используя *

select
table1.id
table1.Column
table2.Column2
-- I want all entries here from table 3 here as well
table3.*
From table1 t1
left outer join table2 t2 on t2.ID = t1.ID
left outer join join table3 t3 on t3.ID2 = t2.ID2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...