mysql - 转换成 View 时sql参数错误

标签 mysql sql sql-server view

我是 sql 新手,我想知道为什么在我将 sql 查询创建到 View 中时会出错

mysql查询:

SELECT staffid AS staff,   
(SELECT count( feedback )FROM msqueue WHERE staffid = staff AND feedback =1) AS a,
(SELECT count( feedback )FROM msqueue WHERE staffid = staff AND feedback =2) AS b,
(SELECT count( feedback )FROM msqueue WHERE staffid = staff AND feedback =3) AS c,
(SELECT count( feedback )FROM msqueue WHERE staffid = staff AND feedback =4) AS d
FROM msqueue
GROUP BY staffid

这个查询结果就是我想要的

|staff| a | b | c | d |     
|d1111| 0 | 1 | 1 | 0 |    
|d1234| 1 | 2 | 4 | 0 |

但是当我创建查询作为 View 时 结果是

|staff| a | b | c | d |     
|d1111| 1 | 3 | 5 | 0 |    
|d1234| 1 | 3 | 5 | 0 |

请帮我看看这段代码是怎么回事..非常感谢

最佳答案

尝试

SELECT staffid AS staff,   
(SELECT count(*) FROM msqueue n WHERE n.staffid = m.staffid AND feedback =1) AS a,
(SELECT count(*) FROM msqueue n WHERE n.staffid = m.staffid AND feedback =2) AS b,
(SELECT count(*) FROM msqueue n WHERE n.staffid = m.staffid AND feedback =3) AS c,
(SELECT count(*) FROM msqueue n WHERE n.staffid = m.staffid AND feedback =4) AS d
FROM msqueue m
GROUP BY staffid

在您的原始查询中,您使用主选择的列 staffid 的别名将其与子查询的 staffid 列配对。这不足以区分两列,因此您得到了每一行所有内容的总和。通过在列名前面使用表别名 mn 我们现在可以清楚地解决这两个问题 列。

参见此处:http://sqlfiddle.com/#!9/ab25a9/1

您甚至可以在子查询中省略表别名,例如

SELECT staffid AS staff,   
(SELECT count(*) FROM msqueue WHERE staffid = m.staffid AND feedback =1) AS a,
(SELECT count(*) FROM msqueue WHERE staffid = m.staffid AND feedback =2) AS b,
(SELECT count(*) FROM msqueue WHERE staffid = m.staffid AND feedback =3) AS c,
(SELECT count(*) FROM msqueue WHERE staffid = m.staffid AND feedback =4) AS d
FROM msqueue m
GROUP BY staffid

http://sqlfiddle.com/#!9/ab25a9/2

编辑

在我这边的所有这些“聪明的嘴”之后,我才发现,你原来的陈述是有效的——至少“靠它自己”(http://sqlfiddle.com/#!9/ab25a9/4)。我还没有尝试将其放在 View 中。也许这就是事情开始出错的时候。更安全的选择肯定是使用表别名。


是的,当您将它放在 View 中时,它确实出错了!但是至少有一个外部查询的表别名一切正常:http://sqlfiddle.com/#!9/f5f1e/1

我首先使用 MySql 对其进行了测试,但语句是相同的,并且在 SQL-Server 中也同样有效,请参见此处 http://sqlfiddle.com/#!6/f5f1e/1

关于mysql - 转换成 View 时sql参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011622/

相关文章:

php - 如何从表中获取行数并将其插入到 MySQL 中的同一个表中?

php - 如何使用 Prepared Statements 检查是否有结果

php - 查询失败!您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册

sql - 在 Go Postgresql 中防止 SQL 注入(inject)

mysql - 在一列 SQL 中连接 ID

php - 如何使用 jquery、ajax、php 和 mysql 异步更新表,从表中删除条目?

SQL Server 2008 - 从字符串开头去除数字

sql-server - 为什么 SQL Server 上的查询速度慢而过程速度快?

sql - 从一个表中选择其中两列不存在于另一个表中的记录

sql-server - SQL 服务器 2012 : How to create a type with a check constraint?