在SQLite中查询多个表时如何累积匹配?

在SQLite中查询多个表时如何累积匹配?,sql,string,sqlite,group-by,inner-join,Sql,String,Sqlite,Group By,Inner Join,表1 表2 ID Name CourseID 1 Course 1 4002 2 Course 2 2342 3 Course 3 2410 当我尝试 CourseID ProfName 4002 John 2342 bob 2410 Bill 4002 Hannah 2342 Cyrus 我得到同一个CourseID的多个实例,当我打印出来时 “1,课程14002,约翰”和 “1,课程1400

表1

表2

ID     Name     CourseID
1     Course 1   4002
2     Course 2   2342
3     Course 3   2410 
当我尝试

CourseID ProfName
4002     John
2342     bob 
2410     Bill
4002     Hannah
2342     Cyrus 
我得到同一个CourseID的多个实例,当我打印出来时

“1,课程14002,约翰”和

“1,课程14002,汉娜”是两个不同的输出

我希望他们的形式

“1,课程14002,约翰和汉娜”


不确定如何更改我的SQL查询以实现此目的?

使用字符串聚合:

SELECT ID, Name, CourseID, ProfName 
FROM Table1, Table2
WHERE Table1.CourseID = Table2.CourseID 
请注意,这使用标准联接语法(
join…on…
)而不是隐式联接(在
from
子句中使用逗号):新代码中不应使用这种老式语法

您还可以使用子查询:

select t1.id, t1.name, t1.courseid, group_concat(t2.profname, ' and ') profnames
from table1 t1
inner join table2 t2 on t1.courseid = t2.courseid 
group by t1.id, t1.name, t1.courseid

不相关的注意:
似乎不是列表分隔符的好选择:如果有两个以上的值,则结果不正确。例如,更常见的选择是逗号(
)——这是SQLite和大多数其他数据库中的默认分隔符。

我猜您希望大多数名称和
之间只在最后一个名称之间使用逗号。这将是:

select t1.*
    (
        select group_concat(t2.profname, ' and ') 
        from table2 t2
        where t2.courseid = t1.courseid
    ) profnames
from table1 t1

如果你有超过2个呢?我想显示完整的列表,例如“John,Hannah,Sarah,Joshua”等等。请在代码问题中给出一个--剪切粘贴&可运行代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。在总体目标上暂停工作,在第一个表达中删去代码,不要给出你期望的,说出你期望的,为什么。
select t1.*, t2.profnames
from table1 t1 join
     (select t2.courseid,
             (group_concat(case when seqnum > 1 then profname end) || ', and '
              max(case when seqnum = 1 then profname end)
             ) as profnames
      from (select t2.*,
                   row_number() over (partition by courseid order by profname desc) as seqnum,
            from table2 t2
           ) t2
      group by t2.courseid
     ) t2
     on t1.courseid = t2.courseid;