Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Sql请求将图书表连接到多个作者到多个标记到多个类别_Sql_Postgresql_Join_Duplicates_Many To Many - Fatal编程技术网

Sql请求将图书表连接到多个作者到多个标记到多个类别

Sql请求将图书表连接到多个作者到多个标记到多个类别,sql,postgresql,join,duplicates,many-to-many,Sql,Postgresql,Join,Duplicates,Many To Many,我正在创建一个在线书店 我已经创建了一个表格簿。 我已经创建了另一个表auteur和一个表来加入book_author 我创建了一个表格标签。带着一本桌子书 我已经创建了一个表格thema,还有一个表格book_thema 我不知道如何要求选择书,书的所有作者在一列中,书的所有标签在一列中,书的所有主题在一列中,没有重复 我第一次尝试只加入book和author表 select l.livreisbn, l.livretitre, string_agg(a.auteurnom, ', ') as

我正在创建一个在线书店

我已经创建了一个表格簿。 我已经创建了另一个表auteur和一个表来加入book_author

我创建了一个表格标签。带着一本桌子书

我已经创建了一个表格thema,还有一个表格book_thema

我不知道如何要求选择书,书的所有作者在一列中,书的所有标签在一列中,书的所有主题在一列中,没有重复

我第一次尝试只加入book和author表

select l.livreisbn, l.livretitre, string_agg(a.auteurnom, ', ') as authors
from livre l
left join auteur_livre al on al.livreisbn = l.livreisbn
left join auteur a on a.auteurcode = al.auteurcode
group by l.livreisbn
很好用

我知道这个结果

"0134685991";"Effective Java";"Bloch"
"0134177304";"Core Java Volume I – Fundamentals";"Horstmann"
"2743615871";"Le dahlia noir";"Ellroy"
"2757872117";"La griffe du chien";"Winslow"
"0596009205";"Head First Java";"Sierra, Bates"
"1033903697";"La frontière";"Winslow"
"0672324536";"Data Structures and Algorithms in Java";"Lafore"
"0132350884";"Clean Code";"Martin"
"2253033138";"Le Nom de la rose";"Eco"
"2290349670";"Cosmopolis";"DeLillo"
"0134694726";"Core Java SE 9 for the Impatient";"Horstmann"
"1119527077";"SQL for Dummies";"Taylor"
"2869305922";"White jazz";"Ellroy"
"2742731107";"Libra";"DeLillo"
"2818503094";"La vie liquide";"Bauman"
"1449358457";"Java Performance: The Definite Guide";"Oaks"
"2742726530";"Americana";"DeLillo"
"2021213157";"Cartel";"Winslow"
"1617291999";"Java 8 in Action";"Mycroft, Fusco"
"2264028815";"Ubik";"Dick"
"0131872486";"Thinking in Java";"Eckel"
"0735605176";"Inside Microsoft SQL Server";"Soukup, Delaney"
"2253059498";"Le Pendule de Foucault";"Eco"
"0134540566";"Scala for the Impatient";"Horstmann"
"2743648893";"La tempête qui vient";"Ellroy"
"2869304673";"Le Grand Nulle part";"Ellroy"
"1449358624";"Learning Spark";"Karau, Kowinski, Zaharia, Wendell"
"225394209X";"De superman au surhomme";"Eco"
"11111111";"Java pour les neuneux";"Ait Khelifa"
"2742788392";"L'homme qui tombe";"DeLillo"
"2743602680";"L.A. Confidential";"Ellroy"
"0321349606";"Java concurrency in practice";"Bloch, Goetz, Peierls, Bowbeer, Holmes, Lea"
太完美了。正是我想要的。但是当我尝试以同样的方式连接其他表时

select l.livreisbn, l.livretitre, string_agg(a.auteurnom, ', '),string_agg(m.motcledesign, ', ') as keywords, string_agg(sst.sousthemelibelle, ', ') as thema
from livre l
left join auteur_livre al on al.livreisbn = l.livreisbn
left join auteur a on a.auteurcode = al.auteurcode
left join motcle_livre ml on ml.livreisbn = l.livreisbn
left join motcle m on m.motcleid = ml.motcleid
left join soustheme_livre stl on stl.livreisbn = l.livreisbn
left join soustheme sst on sst.sousthemecode = stl.sousthemecode
group by l.livreisbn
结果是可怕的,有许多重复的项目

"0134177304";"Core Java Volume I – Fundamentals";"Horstmann, Horstmann, Horstmann, Horstmann, Horstmann, Horstmann, Horstmann";"Informatique, programmation, developpement, conception, java, sql, j2ee";"Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA"
"2743615871";"Le dahlia noir";"Ellroy, Ellroy";"noir, polar";""
"2757872117";"La griffe du chien";"Winslow";"";""
"0596009205";"Head First Java";"Sierra, Bates, Sierra, Bates, Sierra, Bates, Sierra, Bates, Sierra, Bates, Sierra, Bates, Sierra, Bates";"Informatique, Informatique, programmation, programmation, developpement, developpement, conception, conception, java, java, sql, sql, j2ee, j2ee";"Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JAVA, Programmation JA (...)"
我不知道没有重复记录怎么做


很多人都喜欢

distinct
关键字可以添加到
string\u agg()
函数中,以返回以逗号分隔的元素,按字母顺序为函数中的列添加order by,并分别别名所有这些函数生成的列:

select l.livreisbn, l.livretitre, 
       string_agg(distinct a.auteurnom, ', ' order by l.auteurnom) as auteurnom,
       string_agg(distinct m.motcledesign, ', ' order by m.motcledesign) as keywords, 
       string_agg(distinct sst.sousthemelibelle, ', ' order by sst.sousthemelibelle) as thema
  from livre l
  left join auteur_livre al on al.livreisbn = l.livreisbn
  left join auteur a on a.auteurcode = al.auteurcode
  left join motcle_livre ml on ml.livreisbn = l.livreisbn
  left join motcle m on m.motcleid = ml.motcleid
  left join soustheme_livre stl on stl.livreisbn = l.livreisbn
  left join soustheme sst on sst.sousthemecode = stl.sousthemecode
 group by l.livreisbn, l.livretitre;

我使用函数string_agg。“选择b.isbn,b.title,string_agg(a)。我已经用更多的细节和示例代码更新了我的原始帖子。Tnax和Happy new year。Happy year。它运行良好。许多Thanx和Happy year。PS:我使用postfres,但它不适用于MS SQL server?不客气。是的,
string_agg()
仅适用于MS SQL Server 2017+,除非其中存在
distinct
order by
子句。如果答案有帮助,请接受@AferkiwNTamazgha。