Дублируйте полный путь соединения, используя mysql с повторяющимся именем столбца - PullRequest
2 голосов
/ 10 марта 2020

мой код такой

select * from a left join b on a.t = b.t
UNION
select * from a right join b on a.t = b.t;
1003 * мой результат такой результат

Я хочу такой результат результат2

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

мои структуры таблиц:

таблица a:
tx
- -
A 1
B 2
C 3

Таблица B:
ty
- -
B 2
C 3
D 4

код таблицы:

CREATE TABLE `a` (
  `t` varchar(1) NOT NULL,
  `x` int(1) NOT NULL,
  PRIMARY KEY (`t`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `a` VALUES ('A',1);
INSERT INTO `a` VALUES ('B',2);
INSERT INTO `a` VALUES ('C',3);

CREATE TABLE `b` (
  `t` varchar(1) NOT NULL,
  `y` int(1) NOT NULL,
  PRIMARY KEY (`t`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `b` VALUES ('B',2);
INSERT INTO `b` VALUES ('C',3);
INSERT INTO `b` VALUES ('D',4);

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Попробуйте этот запрос для вашего ожидаемого результата.

Select * FROM 
     (SELECT a.t, a.x, b.y FROM a LEFT JOIN b ON a.t = b.t
      UNION ALL
     SELECT b.t, a.x, b.y FROM a RIGHT JOIN b ON a.t = b.t WHERE a.t IS NULL) A 
ORDER BY A.t ASC;

Нажмите здесь, чтобы проверить DBFIDDLE

Надеюсь, вы поймете это. Не стесняйтесь поделиться, если у вас есть запрос.

0 голосов
/ 10 марта 2020

Вот как вы можете смоделировать полное внешнее объединение в MySQL:

SELECT a.t, a.x, b.y FROM a LEFT JOIN b ON a.t = b.t
UNION ALL
SELECT b.t, a.x, b.y FROM a RIGHT JOIN b ON a.t = b.t WHERE a.t IS NULL;

Основные проблемы в вашем текущем запросе в том, что вы делаете SELECT *, что означает, что каждая таблица будет добавлять 2 столбца к предложению выбора (вы хотите только 3). Кроме того, нижняя половина объединения должна выполнить нулевую проверку в таблице a, поскольку она предназначена только для добавления записей, пропущенных в верхнем левом соединении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...