Как передать значение из одного выбора в другой выбор в запросе? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу передать Id из этого ВЫБОР (Мастер):

SELECT x.id, ............ FROM xx INNER JOIN xx ON xx = xx ........ (например: 100 строк)

до (ребенок)

SELECT a,b from xxxxx..... where id in (x.id) (например, также 100 строк)

наконец объединяет оба выхода вместе

Что у меня на уме:

select z.id,...........,z.a,z.b
(
  SELECT x.id, ............ FROM xx INNER JOIN xx ON xx = xx ........  (eg:         100 rows)

  SELECT a,b from xxxxx..... where id in (x.id)   (eg: also 100 rows)
) z

Моя проблема в том, как передать идентификатор в другой выбор.

Нашел решение, но строки потомка не совпадают с мастером, так как ключ (id) в мастере не существует в дочерней таблице:

SELECT z.id, sum(a), sum(b), z.xx, z.xx from xxxxx.....,(SELECT x.id, ............ FROM xx INNER JOIN xx     ON xx = xx ........) as z where id in (z.id) group by z.id

Как вывести результат, например, когда он обнаружит, что идентификатор не существует у дочернего элемента, сумма (a) и сумма (b) будут отображаться как (-).

PS: каждый запрос на выборку объединяет несколько таблиц.

Пример таблицы (200 строк):

Id, м, m1, m2, m3, m4, m5 * * 1 028

1, ...

2, ...

3, ...

4, ...

5, ...

6 ...

Ребенок:

Id, c1, c2, c3, c4, c5

1, ...

1, ...

1, ...

5, ...

5, ...

6 ...

Ожидаемый результат:

(передать весь идентификатор в master ребенку)

Результат (также должно быть 200 строк):

* * Id тысяча шестьдесят три, m1, m2, m3, СУММА (с1), СУММА (с2)

1, ...

2, m1, m2, m3, -, -

3, m1, m2, m3, -, -

* * 4 тысячи семьдесят-одна, m1, m2, m3, -, - * * тысяча семьдесят-две

5, ...

6 ...

Решено (неисправность мозга, мой плохой):

SELECT x.id, ............,AwaitingA, AwaitingB FROM xx INNER JOIN xx     ON xx = xx ........
LEFT JOIN (
SELECT id, sum(a) as AwaitingA, sum(b) as AwaitingB from xxxxx..... group by ....) d
on x.id = d.id

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

Я думаю, что вы хотите подзапрос.

выглядит примерно так:

select * from a where a.id in (select id from b); 

Редактировать: если вы хотите, чтобы несколько столбцов из фильтра были отфильтрованы, вам придется выполнить несколько подзапросов.

select * from a where a.id in (select id from b) and a.xx in (select xx from c)
0 голосов
/ 20 июня 2019
SELECT x.id into #IDTempTable where etc.

затем

SELECT a,b from xxx inner join #IDTempTable as tt on tt.id = xxx.id

Можете ли вы использовать временную таблицу в своем решении? Получите ли вы одинаковое количество строк, конечно, зависит от уникальности идентификаторов.

0 голосов
/ 20 июня 2019

попробуйте как ниже

   SELECT a,b from xxxxx..... where id in ( SELECT x.id FROM xx INNER JOIN xx ON xx = xx)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...