Несоответствие столбцов в запросах UNION - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть столбцы A, B в таблице 1 и столбцы B, C в таблице 2. Нужно выполнить объединение между ними. Например: выберите A, B из таблицы 1 UNION выберите 0, B из таблицы 2.

Мне не нужен этот ноль для устранения несоответствия столбцов. Вместо этого есть другое решение?

Задаю вопрос, приведя простой пример. Но в моем случае структура таблицы очень велика, и запросы уже построены. Теперь мне нужно исправить этот объединенный запрос, заменив этот ноль. (Из-за обновления DB2)

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Чтобы две ножки A и B в соединении были совместимы с соединением, необходимо, чтобы:

a) A and B have the same number of columns
b) The types for each column in A is compatible with the corresponding column in B

В вашем запросе вы можете использовать null, который является частью каждого типа:

 select a, b from T1 
 UNION 
 select null, b from T2 

При определенных обстоятельствах вам, возможно, придется явно привести null к тому же типу, что и A (вероятно, не в этом случае):

 select a, b from Table 1 
 UNION 
 select cast(null as ...), b from Table 2 
0 голосов
/ 12 ноября 2018

Столбец, возвращаемый в наборе результатов SQL, может иметь только один тип данных. Объединение или объединение - все приводит к строкам из первого запроса и строкам второго запроса (в случае объединения они дедуплицируются). Таким образом, первый столбец первого запроса должен соответствовать типу данных первого столбца второго запроса.

Вы можете проверить это, запустив описание:

describe select a,b from t1

Если вы работаете в GUI (соединение JDBC), вы также можете использовать

call admin_cmd('describe select a,b from t1')

Так что, если какой-то столбец не совпадает, вы должны явно привести типы данных.

...