Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
sqlite中的分组行未按预期工作_Sql_Sqlite - Fatal编程技术网

sqlite中的分组行未按预期工作

sqlite中的分组行未按预期工作,sql,sqlite,Sql,Sqlite,因此,我想对所有标题相同的文章进行分组: CREATE TABLE Article( ID INTEGER NOT NULL, Title TEXT ); CREATE TABLE Tag( ID INTEGER NOT NULL, Name TEXT ); CREATE TABLE Article_Tag( Article_ID INTEGER NOT NULL, Tag_ID INTEGER NOT NULL, PRIMARY KEY

因此,我想对所有标题相同的文章进行分组:

CREATE TABLE Article(
    ID INTEGER NOT NULL,
    Title TEXT
);
CREATE TABLE Tag(
    ID INTEGER NOT NULL,
    Name TEXT
);
CREATE TABLE Article_Tag(
    Article_ID INTEGER NOT NULL,
    Tag_ID INTEGER NOT NULL,
    PRIMARY KEY (Article_ID,Tag_ID)
); 
INSERT INTO Article (ID, Title) VALUES
(1,  'wifi'),
(2,  'bluetooth'),
(3,  'firewire');
INSERT INTO Tag (ID, Name) VALUES
(1,  'tag 1'),
(2,  'tag 2'),
(3,  'tag 3');
INSERT INTO Article_Tag (Article_ID, Tag_ID) VALUES
(1,  1),
(1,  2),
(1,  3),
(2,  1);
--------------------------------------
SELECT
  a.Title,  
  t.Name AS TagName
FROM Article AS a
  LEFT OUTER JOIN Article_Tag AS a_t ON a.ID = a_t.Article_ID
  LEFT OUTER JOIN Tag t ON t.ID = a_t.Tag_ID  
--------------------------------------
Title           TagName
wifi            tag 1
wifi            tag 2
wifi            tag 3
bluetooth       tag 1
firewire        (null)
但我想要这个:

SELECT
  a.Title,  
  GROUP_CONCAT(t.Name,';') AS TagNames
FROM Article AS a
  LEFT OUTER JOIN Article_Tag AS a_t ON a.ID = a_t.Article_ID
  LEFT OUTER JOIN Tag t ON t.ID = a_t.Tag_ID
--------------------------------------
Title       TagNames
firewire    tag 1;tag 2;tag 3;tag 1

我做错了什么?

只需添加一个
GROUPBY
子句

Title       TagNames
wifi        tag 1; tag 2; tag3
bluetooth   tag 1;
firewire    (null)

若要以相同的顺序获得相同的结果,请添加“a.id分组”广告,如下所示:

SELECT
  a.Title,  
  GROUP_CONCAT(t.Name,';') AS TagNames
FROM Article AS a
  LEFT OUTER JOIN Article_Tag AS a_t ON a.ID = a_t.Article_ID
  LEFT OUTER JOIN Tag t ON t.ID = a_t.Tag_ID
group by a.title
此处演示:

因为你应该根据问题
得到每个标题一行,我想对所有标题相同的文章进行分组
啊,我明白了,没有这一点,sqlite就不知道如何对
group\u concat
请求的
t.Name
列进行分组。很有道理。
SELECT
  a.Title,  
  GROUP_CONCAT(t.Name,';') AS TagNames
FROM Article AS a
  LEFT OUTER JOIN Article_Tag AS a_t ON a.ID = a_t.Article_ID
  LEFT OUTER JOIN Tag t ON t.ID = a_t.Tag_ID
group by a.id