Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么我的查询在sql中左连接后不断重复字段_Mysql_Sql - Fatal编程技术网

Mysql 为什么我的查询在sql中左连接后不断重复字段

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

我的数据库中有两个具有一对多关系的表,公告(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"
下面是我得到的:

标题有多个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