Comandă exterioară bidirecțională

Să presupunem că avem un tabel A:

itemid mark
1      5
2      3

și tabelul B:

itemid mark
1      3
3      5

Vreau să mă alătur A * B pe A.itemid = B.itemid atât în ​​stânga, cât și în dreapta. adică rezultat:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

Există o modalitate de ao face într-o interogare în MySQL?

0
fr hi bn

3 răspunsuri

Acest lucru funcționează pentru mine pe SQL Server:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
0
adăugat
Întrebarea explică în mod explicit MySQL
adăugat autor cdeszaq, sursa

Ar putea face cu ceva lucru, dar aici este ceva sql

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid;

Aceasta se bazează pe intrarea stângă, care returnează toate rândurile din tabela originală (în acest caz aceasta este tabelul subselect T). Dacă nu există potriviri în tabelul îmbinat, atunci acesta va seta coloana la NULL.

0
adăugat

Se numește o conexiune externă completă și nu este acceptată nativ în MySQL, judecând de la docs . Puteți remedia această limitare utilizând UNION, așa cum este descris în comentariile de pe pagina la care am făcut legătura.

[edit] Din moment ce alții au postat fragmente, te duci aici. Puteți vedea explicații pe pagina legată.

SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL
0
adăugat
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.