Union ou pas union?

Résolu
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

  1. Modérateur
    Bonjour

    Un left join serait plus adéquat je pense.
    1. Modérateur
      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
      
      
      1. 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
        1. Modérateur
          L'id du theme... n'est pas l'id des articles.
          Utilises la requête que je t'ai donné
      2. 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...
        1. 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
          1. 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 :)