ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ без каких-либо условий присоединения - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть две таблицы

t1;

+--------------+-------------+--------------+
| Product Name |   Issue #   |  Risk Level  |
+--------------+-------------+--------------+
| Product1     | Incident#45 | Risk Level 2 |
| Product2     | Incident#23 | Risk Level 3 |
| Product3     | Incident#98 | Risk Level 1 |
+--------------+-------------+--------------+

t2;

+----------+----------------+
| Org Code | Monthly Output |
+----------+----------------+
|      598 |           2000 |
|      412 |            100 |
|      598 |           2500 |
+----------+----------------+

, которые я хотел бы объединить как «внешнее соединение» для создания;

+--------------+-------------+--------------+----------+----------------+
| Product Name |   Issue #   |  Risk Level  | Org Code | Monthly Output |
+--------------+-------------+--------------+----------+----------------+
| Product1     | Incident#45 | Risk Level 2 | (null)   | (null)         |
| Product2     | Incident#23 | Risk Level 3 | (null)   | (null)         |
| Product3     | Incident#98 | Risk Level 1 | (null)   | (null)         |
| (null)       | (null)      | (null)       | 598      | 2000           |
| (null)       | (null)      | (null)       | 412      | 100            |
| (null)       | (null)      | (null)       | 598      | 2500           |
+--------------+-------------+--------------+----------+----------------+

t1 и t2 не имеют похожих столбцов, к которым я могу присоединиться. Можно ли как-нибудь объединить эти таблицы?

Заранее всем спасибо.

Ответы [ 3 ]

3 голосов
/ 10 февраля 2020

Вы можете использовать:

select l1.*, l2.*
from l1 full join
     l2
     on 1 = 0;   -- never true
1 голос
/ 10 февраля 2020

Я думаю, что UNION ALL более эффективен и, что более важно, более читабелен, чем JOIN.

SELECT
    ProductName
    , IssueNumber
    , RiskLevel
    , NULL AS OrgCode
    , NULL AS MonthlyOutput
FROM t1

UNION ALL

SELECT
    NULL AS ProductName
    , NULL AS IssueNumber
    , NULL AS RiskLevel
    , OrgCode
    , MonthlyOutput
FROM t2
1 голос
/ 10 февраля 2020

Вы могли бы очень хорошо использовать union all здесь. Мне кажется, что это наиболее естественный способ сформулировать запрос для вашего вопроса.

Он также обладает преимуществом широкой переносимости: большинство баз данных поддерживают union all - это не так для full join, что Несмотря на то, что десятилетия является частью стандарта SQL, он пока не поддерживается во всех основных продуктах (например, в MySQL).

select product_name, issue#, risk_level, null org_code, null monthly_output from t1
union all
select null, null, null, org_code, monthly_output from t2
...