Мои таблицы и выглядят так

-- t1
id  col_1
1   Tim
2   Marta

-- t2
id  col_2
1   Tim
3   Katarina

Я хочу, чтобы мои результаты были такими?

--Result
id   col_1       col_2
1    Tim           Tim
2    Marta        *Null*
3   *Null*      Katarina  

Если кто-то знает, как я могу это сделать с помощью SQL, дайте мне знать?

1
rehman ali 3 Июл 2021 в 14:01

3 ответа

Лучший ответ

MySQL не имеет ПОЛНОГО ВНЕШНЕГО СОЕДИНЕНИЯ, поэтому вам нужно смоделировать его, но имейте в виду, что это slw

CREATE tABLE t1(id int, col_1 varchar(50))
INSERT INTO t1 VALUES (1,'Tim'),(2,'Martqa')
CREATE tABLE t2(id int, col_2 varchar(50))
INSERT INTO t2 VALUES (1,'Tim'),(3,'Katarina')
SeLECT t1.id, t1.col_1,t2.col_2
FROM t1 LEFT JOIN t2 USING(id)
UNION 
SeLECT t2.id, t1.col_1,t2.col_2
FROM t1 RIGHT JOIN t2 USING(id)
id | col_1  | col_2   
-: | :----- | :-------
 1 | Tim    | Tim     
 2 | Martqa | null    
 3 | null   | Katarina
SeLECT t1.id, t1.col_1,t2.col_2
FROM t1 LEFT JOIN t2 USING(id)
WHERE t1.id > 1
UNION 
SeLECT t2.id, t1.col_1,t2.col_2
FROM t1 RIGHT JOIN t2 USING(id)
WHERE t2.id > 1
id | col_1  | col_2   
-: | :----- | :-------
 2 | Martqa | null    
 3 | null   | Katarina
SELECT * FROM
(SeLECT t1.id, t1.col_1,t2.col_2
FROM t1 LEFT JOIN t2 ON t1.id = t2.id 
UNION 
SeLECT t2.id, t1.col_1,t2.col_2
FROM t1 RIGHT JOIN t2 ON t1.id = t2.id) t1
WHERE id > 1
id | col_1  | col_2   
-: | :----- | :-------
 2 | Martqa | null    
 3 | null   | Katarina

db <> fiddle здесь

0
nbk 3 Июл 2021 в 13:14

Вам нужен full join, который MySQL не поддерживает. Один из способов - получить все идентификаторы и использовать left join:

select *
from (select id from t1
      union    -- on purpose to remove duplicates
      select id from t2
     ) i left join
     t1
     using (id) left join
     t2
     using (id);
0
Gordon Linoff 3 Июл 2021 в 11:04

Попробуй это

select t1.id, t1.col_1, t2.col_2
FROM t1 LEFT OUTER JOIN t2 ON (t1.id=t2.id)
UNION
SELECT t2.id, t1.col_1, t2.col_2
FROM t2 LEFT OUTER JOIN t1 ON (t2.id = t1.id)
0
Amit Verma 3 Июл 2021 в 11:21