分配为动态字段别名的“用户定义变量”错误
Posted
技术标签:
【中文标题】分配为动态字段别名的“用户定义变量”错误【英文标题】:Error on "User Defined Variable" assigned as dynamic Field Alias 【发布时间】:2020-10-15 23:30:04 【问题描述】:我在 Workbench 中创建了 mysql 查询插值。该查询非常适合我的需要,只是我无法将“用户定义的变量”@var1/2/3 作为我的字段别名。
我在这一行 (SELECT field4 FROM view_table LIMIT 0, 1) AS @var1
的 AS @var1 上遇到错误,我怀疑字段 Alias 不接受“用户定义的变量”,如下面的 MySQL 查询所示:
DROP VIEW IF EXISTS view_table;
CREATE VIEW view_table AS
SELECT table3.field1, table1.field2
FROM table1
JOIN table2 ON table1.table2_id = table2.id
JOIN table3 ON table1.table3_id = table3.id
JOIN table4 ON item_var.table4_id = table4.id
WHERE table2.id = 1
ORDER BY table1 ASC LIMIT 3;
SET @var1 := (SELECT table3.field1 FROM view_table LIMIT 0, 1); -- created for the @var1 variable
SET @var2 := (SELECT table3.field1 FROM view_table LIMIT 1, 1); -- created for the @var2 variable
SET @var3 := (SELECT table3.field1 FROM view_table LIMIT 2, 1); -- created for the @var3 variable
SELECT table4.field1, table2.field2, table2.field3,
(SELECT field4 FROM view_table LIMIT 0, 1) AS @var1, -- @var1 is not recognized as alias
(SELECT field5 FROM view_table LIMIT 1, 1) AS @var2, -- @var2 is not recognized as alias
(SELECT field6 FROM view_table LIMIT 2, 1) AS @var3 -- @var3 is not recognized as alias
FROM table2
JOIN table4 ON table2.id = table4.id
WHERE table2.id = 1;
这是我想要的查询结果:
+-------------+------------+------------+------------+------------+-------------+------------+
|name |Field1 |Field2 |Field3 |@var1 |@var2 |@var3 |
+-------------+------------+------------+------------+------------+-------------+------------+
|XYZ Company |Field1Data |Field2Data |Field3Data |Field4Data | Field5Data |Field6Data |
+-------------+------------+------------+------------+------------+------------+-------------+
谁能帮我找出作为字段别名的标头变量的正确 MySQL 语法?
更新: 我已经在下面发布了解决方案以供参考。
【问题讨论】:
您是否尝试过 Somwang Souksavatd 在这里给出的答案:***.com/questions/3075147/… 我查看了它,它与我的情况不同。我在这里尝试将@vendor1/2/3 作为我的字符串字段名作为别名。我想我可能无法将此变量转换为字符串。实际上还不确定,但至少我仍在调查和搜索一些文件或相同的案例。 如果手动设置您的供应商变量会发生什么,例如SET your_vendor_variable = 'vendorX' 而不是使用选择语句,然后使用 your_vendor_variable 作为别名。然后你会得到同样的错误吗? 嗨@wosi 抱歉,我花了这么长时间才回复。我现在在上面的代码中遇到了麻烦。分配给价格的别名“min_prices”现在出现错误。以前它的工作。错误仅限于此“FROM price AS min_prices — 错误代码:1146。表 'project_x.min_prices' 不存在”。如果我删除别名,它会破坏我的目的并且对我更有用。否则,我将取而代之带回视图。但是突然想知道它会出错。我必须先解决这个问题并尝试您的建议。 确认“FROM price AS min_prices”出现错误。我用“DROP VIEW IF EXISTS min_prices; CREATE VIEW min_prices AS”替换了它,现在它可以工作了。我很惊讶这是怎么发生的。 【参考方案1】:终于!我得到了解决方案!
我只需要将上面的最后一个查询连接起来,就可以插入我创建的字段变量。然后,将它传递给一个语句,执行该语句并释放它。
SET @statement_var = CONCAT("
SELECT table4.field1, table2.field2, table2.field3,
(SELECT field4 FROM view_table LIMIT 0, 1) AS '", @var1, "' ,
(SELECT field5 FROM view_table LIMIT 1, 1) AS '", @var1, "' ,
(SELECT field6 FROM view_table LIMIT 2, 1) AS '", @var1, "'
FROM table2
JOIN table4 ON item_table2.id = table4.id
WHERE table2.id = 1;");
PREPARE statement FROM @statement_var;
EXECUTE statement;
DEALLOCATE PREPARE statement;
希望这对其他有插值问题的人有所帮助。干杯!
【讨论】:
以上是关于分配为动态字段别名的“用户定义变量”错误的主要内容,如果未能解决你的问题,请参考以下文章
React Webpack 错误“找不到模块:错误:无法解析 'public/bundle.js' in..”/“字段 'browser' 不包含有效的别名配置”