SQLite中的组连接

e0bqpujr  于 2023-03-08  发布在  SQLite
关注(0)|答案(2)|浏览(122)

我有这样的数据
通过使用以下查询

select ABSTRACTS_ITEM._id,Name 
from ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
where
ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
and
ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID

现在,我想展示这样的数据
等等。。我也知道它可以通过GROUP_CONCAT函数来实现。所以,我尝试了这个

SELECT ABSTRACTS_ITEM._id,
GROUP_CONCAT(ABSTRACT_AUTHOR.NAME) FROM
(select ABSTRACTS_ITEM._id,
Name
from
ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
where
ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
and
ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID)

但是,它显示了我的错误。那么,我在这里做错了什么。什么是正确的程序来实现呢?

nkoocmlb

nkoocmlb1#

使用聚合函数时需要添加GROUP BY子句。也可以使用JOIN来连接表。
所以试试这个:

SELECT AI._id, GROUP_CONCAT(Name) AS GroupedName
  FROM ABSTRACTS_ITEM AI 
  JOIN AUTHORS_ABSTRACT AAB ON AI.ID = AAB.ABSTRACTSITEM_ID
  JOIN ABSTRACT_AUTHOR AAU ON AAU._id = AAB.ABSTRACTAUTHOR_ID
 GROUP BY tbl._id;
请参阅此示例SQLFiddle

你刚才试的几乎是对的。你只需要在最后加上GROUP BY子句。但是第一个子句更好。

SELECT ID,
GROUP_CONCAT(NAME) 
FROM
    (select ABSTRACTS_ITEM._id AS ID,
     Name
     from
    ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
    where
    ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
    and
    ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID)
GROUP BY ID;
7y4bm7vi

7y4bm7vi2#

下面是我对这个封闭式问题的回答(它有一个很好的展示)。SQL group results by row
必须向所选字段添加聚合函数。
你想要的是:带有自定义分隔符','的GROUP_CONCAT
请参阅相关MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html
您的选择查询将如下所示:

SELECT id_place, placename, GROUP_CONCAT(plant_name SEPARATOR ', ') AS 'plantnames'
FROM BLOOM
JOIN PLACE ON id_place = fk_place
JOIN PLANT ON id_plant = fk_plant
GROUP BY id_place, placename;

然后,您将获得所需的输出:
| id_地点|地名|植物名称|
| - ------|- ------|- ------|
| 1个|纽约|兰花郁金香|
| 第二章|伦敦|蔷薇、兰花、郁金香|
| 三个|巴黎|蔷薇、百合、紫罗兰|
下面是一个DB Fiddle(MySQL 8.0)来验证这一点:https://www.db-fiddle.com/f/sSU7G4kKEaxsLMNweAtLSA/2

相关问题