0
votes

Comment joindre deux tables sur une colonne tout en conservant les valeurs dans une autre colonne?

J'ai deux tableaux.

table_liens

URL                     Links
example.com/1           6
example.com/2           2
example.com/3           4
example.com/4           null

table_pages

URL
example.com/2
example.com/4

Comment combiner toutes les URL de manière à conserver le nombre de liens?

Résultat souhaité:

URL                     Links
example.com/1           6
example.com/2           2
example.com/3           4


0 commentaires

3 Réponses :


0
votes

quelque chose comme ceci: (pas sûr à 100% cependant)

SELECT * 
FROM links_table l 
LEFT OUTER JOIN pages_table p ON p.url = l.url 
UNION 
SELECT * 
FROM links_table l 
RIGHT OUTER JOIN pages_table p ON p.url = l.url 
WHERE l.url IS NULL; 


2 commentaires

SELECT url, liens FROM links_table UNION (SELECT url, null FROM pages_table MOINS SELECT url, liens FROM links_table) ceci?


SELECT * FROM liens_table l GAUCHE OUTER JOIN pages_table p ON p.url = l.url UNION SELECT * FROM liens liens l DROIT OUTER JOIN pages_table p ON p.url = l.url O l.url EST NULL;



1
votes

Dans MySQL, vous pouvez émuler une jointure complète avec UNION ALL et une agrégation:

select url, max(links) links
from (
    select url, links from links_table
    union all
    select url, null from pages_table
) t
group by url


2 commentaires

Parfait, cela semble fonctionner. Je souhaite que MySQL ait une fonction native FULL JOIN .


@ Pikamander2: oui, malheureusement cela ne fait pas partie de la syntaxe MySQL, comme pour la jointure latérale (aka cross apply ) ...



1
votes

Vous semblez vouloir renvoyer toutes les lignes de links_table plus les lignes supplémentaires de pages_table qui ne sont pas dans cette table. J'utiliserais simplement union all :

select l.url, l.links
from links_table l
union all
select p.url, null
from pages_table p
where not exists (select 1 from links_table where l.url = p.url);


0 commentaires