如何将硬编码值包含在 MySQL 查询的输出中?



我创建了一个MySQL sproc,它返回3个单独的结果集。 我正在下游实现 npm mysql 包以执行 sproc 并获得具有 3 个结果集的 json 结构的结果。 我需要能够过滤基于每个结果集中的某种类型的指示器返回的 json 结果集。 例如,如果我想从专门处理供应商的 json 响应中获取结果集,那么我可以使用类似于以下内容的某种类型的 js 过滤器:

var supplierResultSet = mySqlJsonResults.filter(x => x.ResultType === 'SupplierResults');

我认为 SQL Server 提供了在 SQL 结果集中包含硬编码列值的能力,如下所示:

select
'SupplierResults',
*
from
supplier

但是,这种方法在MySQL b/c中似乎是无效的,MySQL Workbench告诉我sproc语法无效,并且不允许我保存更改。 您是否知道在 MySQL 中是否可以实现我想要实现的目标,如果不是,那么您能否推荐替代方法来帮助我实现在每个结果集中包含某种类型的固定指示器的最终目标,以提供用于下游过滤的句柄json 响应?

如果我正确关注了您,您只需要在*前面加上表名或别名:

select 'SupplierResults' hardcoded, s.* from supplier s

据我所知,这是SQL标准。 仅当selec子句中未添加其他表达式时,select *才有效;SQL Server对此很宽松,但大多数其他数据库都遵循该标准。

为包含硬编码值的列分配一个名称也是一个好主意(我在上面的查询中将其命名hardcoded(。

在MySQL中,您可以简单地将*放在首位:

SELECT *, 'SupplierResults'
FROM supplier

在 dbfiddle 上演示

更具体地说,在您的情况下,在您的查询中,您需要执行此操作

select
'SupplierResults',
supplier.*  -- <-- this
from
supplier

试试这个

create table a (f1 int);
insert into a values (1);
select 'xxx', f1, a.* from a;

基本上,如果 select 中有其他字段,则在"*"前面加上表名或别名

最新更新