Mysql 为什么我的查询在sql中左连接后不断重复字段
我的数据库中有两个具有一对多关系的表,公告(annonce)可以有多个或零个附件(pdf)。 我想要的是获得所有附件(pdf),它们有相同的标题(在我的数据库中的标题),而不重复标题。 这是我试过的Mysql 为什么我的查询在sql中左连接后不断重复字段,mysql,sql,Mysql,Sql,我的数据库中有两个具有一对多关系的表,公告(annonce)可以有多个或零个附件(pdf)。 我想要的是获得所有附件(pdf),它们有相同的标题(在我的数据库中的标题),而不重复标题。 这是我试过的 SELECT * FROM annonce LEFT JOIN pdfannonce on annonce.id = pdfannonce.annonce_id WHERE categorie = "Emplois du temps" AND annonce.de
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"
下面是我得到的:
标题有多个pdf,但有一个标题、目的地、类别
我想要的是
+----+-------+------------------+----------------+-----------------+
| id | titre | pdf | destination | catégorie |
+----+-------+------------------+----------------+-----------------+
| 1 | book | my_first_pdf | 1re anne | Emploi du temps |
| | | my_second_pdf | | |
+----+-------+------------------+----------------+-----------------+
您的问题不清楚,但您的查询看起来不正确。这是一种“更好”的查询形式:
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')
我假设category
来自pdfannonce
。这两项改变是:
- 在中,“悬空”或被替换为,这大概是您真正想要的逻辑
中第二个表上的条件在LEFT JOIN
子句中on
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子句周围加括号,否则结果会出错。如果没有样本数据和所需结果,你的问题不清楚。那么你需要什么样的输出呢?使用
分组方式
?我想要的是获得所有具有相同目的地和相同类别的pdf,而不重复目的地和相同类别字段,因为可能存在多对一关系(左联接表中的多行表示主表中的一行)我得到了同样的结果,我想要的是得到所有具有相同目的地和相同类别的pdf,而不重复目的地和相同类别字段。但是我唯一可以访问我的第一个PDFin的东西,而不是GROUP_CONCAT。你可以尝试另一个聚合函数,你应该尝试它´,因为我不认为左连接是正确的选择。如果我不进行左连接,我将无法获取pdf为零的公告,我将使用pdfsi获取所有公告。我找到了一个解决方案a刚刚添加了一个seperator组_CONCAT(p.pdf分隔符“;”),现在我可以分别获取它们。默认情况下,组_CONCAT使用逗号作为分隔符,但ok