在子查询的子查询中使用Mysql列

时间:2017-09-14 10:34:27

标签: mysql sql

我有两张桌子

报告

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表,但我认为将顾问存储在报告表中可能会使查询更有效率并且想知道是否有办法执行此操作。使用这种结构在代码中也更简单。

2 个答案:

答案 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列表。以下是一些原因:

  • 数字应存储为数字,而不是字符串。
  • Ids应该声明外键约束。
  • SQL的优势不是字符串函数。

表示数据的正确方法是使用联结表

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)
);