Я сравниваю поведение между SQL-машинами. Oracle имеет поведение я бы ожидать от SQL двигателя для полного внешнего соединения:Почему полное внешнее соединение в HIVE дает странный результат, когда отсутствует одно из полей объединения?
Oracle
CREATE TABLE sql_test_a
(
ID VARCHAR2(4000 BYTE),
FIRST_NAME VARCHAR2(200 BYTE),
LAST_NAME VARCHAR2(200 BYTE)
);
CREATE TABLE sql_test_b
(
NUM VARCHAR2(4000 BYTE),
FIRST_NAME VARCHAR2(200 BYTE),
LAST_NAME VARCHAR2(200 BYTE)
);
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('1', 'John', 'Snow');
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('2', 'Mike', 'Tyson');
INSERT INTO sql_test_b (NUM, FIRST_NAME, LAST_NAME) VALUES ('20', 'Mike', 'Tyson');
Когда я выполнить следующее, это дает мне ожидаемый результат. Полученная таблица содержит две строки, одна из строк содержит NULL
для поля NUM
, поскольку в таблице sql_test_b
отсутствует снег john.
SELECT A.FIRST_NAME, A.LAST_NAME, A.ID, B.NUM
FROM
SQL_TEST_A A
FULL OUTER JOIN
SQL_TEST_B B
ON
A.FIRST_NAME = B.FIRST_NAME
AND
A.LAST_NAME = B.LAST_NAME;
Вы можете проверить SQL скрипт здесь: http://sqltest.net/
Hive
В энцефалопатии, однако, если вы должны были попробовать то же самое, полное внешнее объединение результатов в таблице с двумя рядами , Строка, которая должна быть строкой «Джон Снег», содержит NULL
для полей FIRST_NAME, LAST_NAME и NUM. 1
заполняется для ID
, но все.
Почему такое странное поведение в отношении ВИЧ? Это ошибка? Или я что-то пропустил ... потому что Oracle 11g, похоже, справляется с этим намного лучше. Благодарю.
mysql не поддерживает полное внешнее соединение, то как вы получаете правильный результат? – Farooque
Я полагаю, что это Oracle, а не MySQL. Спасибо @Farooque !! – Candic3
Является ли это поведение в ВИЧ-инфекции нормальным? – Candic3