Объединить два запроса в один

KolyaA

Guest
Объединить два запроса в один

Для получение необходимого результата приходится делать два запрос, можно ли это как-то сделать с помощью только одного запроса

CREATE TABLE temp SELECT R_DOGOVOR.NOM_DOGOVOR, R_DOGOVOR.DAT_DOGOVOR,
R_HD_ZAK.ID_HD_ZAK,
R_HD_ZAK.NOM_ZAK, MIN(R_HD_NAKL.DAT_NAKL) AS 'DAT_ZAK' FROM R_DOGOVOR LEFT JOIN R_HD_ZAK USING (ID_DOGOVOR) LEFT JOIN R_HD_NAKL USING(ID_HD_ZAK) GROUP BY (R_HD_ZAK.NOM_ZAK)



select temp.* FROM temp LEFT JOIN R_HD_NAKL USING (ID_HD_ZAK);
 

KolyaA

Guest
Долго объяснять.Вопрос вообще-то не в лефтджоин, а в том, можно ли как-то сделать , чтобы два селекта были в одном запросе.
 

chira

Новичок
KolyaA
другими словами тебе предлагают сравнить два результата
1. с твоими двумя запросами и
2. просто один селект
Код:
SELECT R_DOGOVOR.NOM_DOGOVOR
 , R_DOGOVOR.DAT_DOGOVOR
 , R_HD_ZAK.ID_HD_ZAK
 , R_HD_ZAK.NOM_ZAK
 , MIN(R_HD_NAKL.DAT_NAKL) AS 'DAT_ZAK' 
FROM R_DOGOVOR 
  LEFT JOIN R_HD_ZAK USING (ID_DOGOVOR) 
  LEFT JOIN R_HD_NAKL USING(ID_HD_ZAK) 
GROUP BY (R_HD_ZAK.NOM_ZAK)
результаты должны совпадать ...
 

KolyaA

Guest
Конечно они не должны совпадать:

Вот результат просто одного селекта
+-------------+-------------+-----------+---------+------------+
| NOM_DOGOVOR | DAT_DOGOVOR | ID_HD_ZAK | NOM_ZAK | DAT_ZAK |
+-------------+-------------+-----------+---------+------------+
| sixteen | 2003-08-23 | 8 | eight | 1998-12-02 |
| eleven | 1998-12-19 | 5 | five | 2003-01-03 |
| seven | 1997-10-10 | 4 | four | 2001-10-12 |
| five | 2000-01-01 | 1 | one | 2000-08-12 |
| sixteen | 2003-08-23 | 7 | seven | 2000-01-11 |
| eleven | 1998-12-19 | 6 | six | 2001-09-20 |
| seven | 1997-10-10 | 3 | three | 1999-02-09 |
| five | 2000-01-01 | 2 | two | 1998-10-20 |
+-------------+-------------+-----------+---------+------------+
8 rows in set (0.03 sec)

А вот что будет если добавить второй запрос, т.е. так как было написано у меня в начале

+-------------+-------------+-----------+---------+------------+
| NOM_DOGOVOR | DAT_DOGOVOR | ID_HD_ZAK | NOM_ZAK | DAT_ZAK |
+-------------+-------------+-----------+---------+------------+
| sixteen | 2003-08-23 | 8 | eight | 1998-12-02 |
| sixteen | 2003-08-23 | 8 | eight | 1998-12-02 |
| sixteen | 2003-08-23 | 8 | eight | 1998-12-02 |
| eleven | 2000-01-01 | 5 | five | 2003-01-03 |
| eleven | 2000-01-01 | 5 | five | 2003-01-03 |
| seven | 1999-09-05 | 4 | four | 2001-10-12 |
| seven | 1999-09-05 | 4 | four | 2001-10-12 |
| five | 1998-12-19 | 1 | one | 2000-08-12 |
| five | 1998-12-19 | 1 | one | 2000-08-12 |
| five | 1998-12-19 | 1 | one | 2000-08-12 |
| sixteen | 2003-08-23 | 7 | seven | 2000-01-11 |
| sixteen | 2003-08-23 | 7 | seven | 2000-01-11 |
| eleven | 2000-01-01 | 6 | six | 2001-09-20 |
| eleven | 2000-01-01 | 6 | six | 2001-09-20 |
| eleven | 2000-01-01 | 6 | six | 2001-09-20 |
| seven | 1999-09-05 | 3 | three | 1999-02-09 |
| seven | 1999-09-05 | 3 | three | 1999-02-09 |
| seven | 1999-09-05 | 3 | three | 1999-02-09 |
| five | 1998-12-19 | 2 | two | 1998-10-20 |
| five | 1998-12-19 | 2 | two | 1998-10-20 |
| five | 1998-12-19 | 2 | two | 1998-10-20 |
+-------------+-------------+-----------+---------+------------+
21 rows in set (0.01 sec)

Но еще раз повторяю, вопрос не в этом, а в том может ли в одном запросе быть два селекта. Можно рассмотреть какой-нибудь другой пример.
 

f1

formula 1
Но еще раз повторяю, вопрос не в этом, а в том может ли в одном запросе быть два селекта. Можно рассмотреть какой-нибудь другой пример.
начиная с версии 4.0 реализован UNION
возможно это то, что тебе надо
 
Сверху