Список запросов Sql Отцы и дети с объединениями, как их отличить? - PullRequest
1 голос
/ 08 июня 2010

Имея эти таблицы:

table_n1:
| t1_id | t1_name |
|   1   | foo     |

table_n2:
| t2_id | t1_id   | t2_name |
|   1   |   1     | bar     |

Мне нужен запрос, который дает мне два результата:

| names     |
| foo       |
| foo / bar |

Но я не могу понять правильный путь. Я написал это:

SELECT
    CONCAT_WS(' / ', table_n1.t1_name, table_n2.t2_name) AS names
FROM
    table_n1
        LEFT JOIN table_n2 ON table_n2.t1_id = table_n1.t1_id

, который работает на половину: это возвращает только строку 2 ° (в примере выше):

| names     |
| foo - bar |

Этот запрос возвращает имя «папа» (table_n1), только если у него нет «потомков» (table_n2).

Как я могу это исправить?

1 Ответ

2 голосов
/ 08 июня 2010

Использование UNION и изменение LEFT JOIN на INNER JOIN должно дать вам правильный результат.

SELECT  table_n1.t1_name AS names 
FROM    table_n1 
UNION ALL
SELECT  CONCAT_WS(' / ', table_n1.t1_name, table_n2.t2_name) AS names 
FROM    table_n1 
        INNER JOIN table_n2 ON table_n2.t1_id = table_n1.t1_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...