Объедините 3 таблицы, используя Group By MySQL - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь создать запрос, который может предоставить мне желаемый результат, используя следующие 3 таблицы:

Table_A

|-----------|--------|
|    scui   |  text  |
|    1002   |   abc  |
|    1002   |   def  |
|    1002   |   ghi  |
|-----------|--------|

Table_B

|------------|-----------|
|    scui    |    cui    |
|    1002    |    c002   |
|    1003    |    c003   |
|    1004    |    c004   |
|------------|-----------|

Table_ C

|-----------|------------|------------|
|    cui    |    text    |    scui    |
|    c002   |    123     |            |
|    c002   |    456     |            |
|    c002   |    abc     |    1002    |
|-----------|------------|------------|

Желаемый результат

|------------|------------|
|    scui    |    text    |
|    1002    |    abc     |
|    1002    |    def     |
|    1002    |    ghi     |
|    1002    |    123     |
|    1002    |    456     |
|------------|------------|

Я пробовал несколько вариантов, например, используя Join для соединения всех трех таблиц, но с помощью Join я не возможность использовать Group By для определенного c Join. Я создал следующий запрос:

SELECT DISTINCT a.scui, c.cui, a.text FROM Table_A a 
JOIN
    Table_B b ON (a.scui = b.scui)
JOIN
    Table_C c ON (b.cui = c.cui)
GROUP BY a.scui;

После долгих размышлений я подумал, что могу также использовать Table_A и Table_C и выполнить SELF JOIN, но не уверен, что это будет правильный вариант.

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

ищет желаемый результат, кажется, вам нужно объединение между первой таблицей и другими в объединении

SELECT  a.scui,  a.text 
FROM Table_A a 
UNION 
select b.scui, c.text
from Table_B b
INNER JOIN Table_C c on b.cui = c.cui

Предложение UNION возвращает отдельный результат

0 голосов
/ 17 июня 2020
Table_A
|-----------|--------|
|    scui   |  text  |
|    1002   |   abc  |
|    1002   |   def  |
|    1002   |   ghi  |
|-----------|--------|

Table_B
|------------|-----------|
|    scui    |    cui    |
|    1002    |    c002   |
|    1003    |    c003   |
|    1004    |    c004   |
|------------|-----------|

Table_C
|-----------|------------|------------|
|    cui    |    text    |    scui    |
|    c002   |    123     |            |
|    c002   |    456     |            |
|    c002   |    abc     |    1002    |
|-----------|------------|------------|

Desired Output
|------------|------------|
|    scui    |    text    |
|    1002    |    abc     |
|    1002    |    def     |
|    1002    |    ghi     |
|    1002    |    123     |
|    1002    |    456     |
|------------|------------|

Нам нужно использовать как JOIN , так и UNION

SELECT  A.scui,  A.text 
FROM Table_A as A 
UNION 
SELECT B.scui, C.text
from Table_B as B
JOIN Table_C as C on B.cui = C.cui

Результат:

query result

0 голосов
/ 17 июня 2020

Используя union, вы можете легко получить результат

SELECT scui, text 
FROM Table_A
UNION 
SELECT Table_B.scui, Table_C.text
FROM Table_B INNER JOIN Table_C ON TABLE_B.cui = TABLE_C.cui
...