Union ou pas union? [Résolu/Fermé]

Signaler
-
 Mira -
Bonjour,

Je suis débutante en SQL et je ne sais pas trop comment m'y prendre pour faire une requête spécifique.

J'ai un onglet article qui contient des articles. Un onglet vidéo qui contient des vidéos et un onglet solution qui contient une sélection des articles/vidéo présents dans les deux premiers onglets en fonction d'un thème.

Les articles et les vidéos sont dans une même table avec un filtre pour s'il s'agit d'un article ou d'une vidéo. J'ai créé une deuxième table pour l'onglet thème, qui contient différents thèmes

J'ai crée une table de liaison qui contient un clé étrangère article et un clé étrangère thème.

Voici mes tables

- TABLE ARTICLES
- id
- titre
- chapeau
- url_image
- type

TABLE THEME
- id
- theme

- TABLE ARTICLE THEME
- id
- article_id
- article_theme

Je voudrais faire apparaitre les articles qui ont un thème.

Je pensais faire un union en sélectionnant mes 2 clés étrangères et dire que le thème ne doit pas être null mais je n'ai pas le même nombre de colonnes... du coup je ne sais pas comment faire...

Pourriez-vous m'aider svp ?

Merci beaucoup :)

7 réponses

Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
Bonjour

Un left join serait plus adéquat je pense.
Je fais un left join sur ma table article thème ?
Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
Oui
un truc du genre
SELECT *
FROM article_theme AT
LEFT JOIN theme T ON T.id = AT.article_theme
LEFT JOIN article A ON A.id = AT.article_id

Oh merci :)

Je viens de me renseigner sur le left joint et ça a l'air de marcher avec ce code

SELECT *
FROM article
LEFT JOIN theme ON article.id = theme.id
WHERE theme is NOT NULL


Tu crois qu'il est propre ? car je n'ai pas eu besoin de ma table article_theme
Messages postés
32980
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2021
3 560
L'id du theme... n'est pas l'id des articles.
Utilises la requête que je t'ai donné
Il ne trouve pas AT, du coup j'ai fait un mixte des deux.

SELECT *
FROM article_theme 
LEFT JOIN theme ON article_theme.id = article_theme.id
LEFT JOIN article  ON article.id = article_theme.id


Mais ça me fait des doublons...
Dsl du dérangement mais j'ai un autre problème :/

Quand je veux regarder ce qu'il y'a dans ma table theme_article, j'ai ce message qui apparait :

#1054 - champs theme.id inconnue dans order clause.

Je n'arrive pas à savoir pourquoi il me dit ça...

=> problème résolu, j'ai supprimé ma table et rallumé mon ordinateur
J'ai relue plus posément ton code et ajouté ce qui manquait :

SELECT *
FROM article_theme as AT
LEFT JOIN theme as T ON T.id = AT.theme_id
LEFT JOIN article as A ON A.id = AT.article_id


Merci de ton aide :)