Почему мой запрос повторял поля после левого соединения в sql - PullRequest
1 голос
/ 29 апреля 2020

У меня есть две таблицы в моей базе данных с отношением один-ко-многим, что объявление (annonce) может иметь несколько или нулевых вложений (pdf). я хочу получить все вложения (pdf), которые имеют одинаковый заголовок (титр в моей базе данных) без повторения заголовка. вот что я пробовал

SELECT *
FROM annonce LEFT JOIN
     pdfannonce
     on annonce.id = pdfannonce.annonce_id
 WHERE categorie = "Emplois du temps" AND
       annonce.destination = "1re Année" or annonce.destination = "Tous"

и вот что я получаю:

enter image description here

titre имеют несколько PDF, но имеют один титр, пункт назначения, категория ie

что я хочу получить, это

+----+-------+------------------+----------------+-----------------+
| id | titre |       pdf        |  destination   |   catégorie     |
+----+-------+------------------+----------------+-----------------+
|  1 | book  | my_first_pdf     |   1re anne     | Emploi du temps |
|    |       |    my_second_pdf |                |                 |
+----+-------+------------------+----------------+-----------------+

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Для вашего результата сделайте это

SELECT 
a.id,a.titre ,GROUP_CONCAT(p.pdf),a.destination   ,a.catégorie
FROM annonce a LEFT JOIN
     pdfannonce p
     on a.id = p.annonce_id
 WHERE categorie = "Emplois du temps" AND
       (a.destination = "1re Année" or a.destination = "Tous")
GROUP BY a.id,a.titre,a.destination   ,a.catégorie

Главное, что вы должны помнить, вы должны заключать в скобки вокруг предложения скобок where, иначе результат будет неправильным.

0 голосов
/ 29 апреля 2020

Ваш вопрос не ясен, но ваш запрос выглядит неправильно. Это «лучшая» форма запроса:

SELECT *
FROM annonce a LEFT JOIN
     pdfannonce p
     on a.id = p.annonce_id AND p.categorie = 'Emplois du temps'
 WHERE a.destination in ('1re Année', 'Tous')

Я предполагаю, что categorie исходит от pdfannonce. Два изменения:

  • «Висеть» OR заменено на IN, что, по-видимому, является логикой c, которую вы действительно хотите.
  • Условие на вторая таблица в LEFT JOIN содержится в предложении ON.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...