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. 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 :)
    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. 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. 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. 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. Modérateur
            Bonjour

            Un left join serait plus adéquat je pense.