我有两张桌子
报告
id consultants
1 1,2,3,4
用户
id name
1 John
2 Tom
当我尝试运行此查询时,我收到一条错误:“where子句中的未知列'reports.consultants'”
SELECT reports.id,
(SELECT GROUP_CONCAT(name SEPARATOR ", ") from (SELECT name from users where users.id in (reports.consultants)) a) as consultant
FROM reports
我曾想过使用一个单独的ReportConsultants表,但我认为将顾问存储在报告表中可能会使查询更有效率并且想知道是否有办法执行此操作。使用这种结构在代码中也更简单。
答案 0 :(得分:1)
是的,语法可能略有不同
SELECT reports.id,
(SELECT GROUP_CONCAT(name SEPARATOR ", ") from users where FIND_IN_SET(users.id, reports.consultants)) as consultant
FROM reports
答案 1 :(得分:0)
修复您的数据结构!您不应该在字符串中存储ID列表。以下是一些原因:
表示数据的正确方法是使用联结表
create table ReportConsultants (
ReportConsultantId int auto_increment primary key,
ReportId int,
ConsultantId,
constraint fk_reportconsults_report foreign key (reportid) references reports(reportid),
constraint fk_reportconsults_consultant foreign key (consultantid) references consultants(consultantid)
);