mysql - 在子查询mysql中使用父查询的id列

标签 mysql subquery

我有这个查询(有效):

SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM 
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM, 
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti 
inner join periti on appuntamenti.id_perito = periti.id 
inner join zone on appuntamenti.id_zona = zone.id 
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '77'
GROUP BY AMPM, PERITI) AS GIORNO1AM
union
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM 
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM, 
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti 
inner join periti on appuntamenti.id_perito = periti.id 
inner join zone on appuntamenti.id_zona = zone.id 
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '78'
GROUP BY AMPM, PERITI) AS GIORNO1AM
union
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM 
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM, 
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti 
inner join periti on appuntamenti.id_perito = periti.id 
inner join zone on appuntamenti.id_zona = zone.id 
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '79'
GROUP BY AMPM, PERITI) AS GIORNO1AM
order by NOME ASC

我想从查询中删除所有“联合”,并在嵌套 where 子句中使用 zone 表 中的 id 列

类似的东西:

SELECT p.id ,(SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM 
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM, 
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti 
inner join periti on appuntamenti.id_perito = periti.id 
inner join zone on appuntamenti.id_zona = zone.id 
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = p.id
GROUP BY AMPM, PERITI) AS GIORNO1AM) AS RISULTATO
FROM zone p

但是......当我尝试这个改变时,我得到了这个错误:

1054 - Unknown column 'p.id' in 'where clause'

请帮助我:)

最佳答案

除了 appuntamenti.id_zona 之外,union 的所有元素都是相同的吗?如果是这样,那岂不是行得通:

SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM 
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM, 
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti 
inner join periti on appuntamenti.id_perito = periti.id 
inner join zone on appuntamenti.id_zona = zone.id 
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona IN (77, 78,79)
GROUP BY AMPM, PERITI) AS GIORNO1AM

关于mysql - 在子查询mysql中使用父查询的id列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53390747/

相关文章:

php - 在 Wamp Server Mysql 命令行中使用 Mysqldump 备份所有数据库时出现错误 1064(42000)

php - MySql PHP 行请求变量

mysql - SQL 平衡计算按日期排序

sql - PostgreSQL 中的 LATERAL JOIN 和子查询有什么区别?

MySQL 子查询结果,但也在其上放置条件

mysql - SQL:为按重复列值分组的查询结果创建新表

mysql - 将查询结果(列)插入 mysql 中的现有表中

php - $.ajax编码问题

mysql - 查询连接同表错误

subquery - Makumba 列表按子集排序