我已经为这项任务苦恼了 2 天,但我真的找不到解决方案,因为我不是 MySQL 专家。所以基本上我有这个查询
sql.Append("select distinct ");
sql.Append(@"{0}.field1,
{0}.field2,
{0}.field3,
{0}.field4,
{0}.field5,
---
---
false as customField1,
false as customField2,
{1}.name as customfield3
from {0} join {1} on {0}.field2check = {1}.id where field2check = ?condition");
这是我在我的 C# 类中构建的选择文本。然后这个查询完成并提供给数据库,作为响应给我一个存储在 DataTable 中的表。我的问题是这个字段
false as customField1,
false as customField2,
{1}.name as customfield3
实际上是在评估条件后获得的,并且必须返回一个 tinyint(1) 以在我的 c# 代码中解释为 bool 值,因为 bool 类型在我的 sql 中不存在。如果我直接写 0 或 1,这个值将转换为 BIGINT,在 C# 中被解释为 Int32。
我知道我可以创建一个自定义函数来存储在我的数据库中
CREATE FUNCTION myDb.x_cast_to_tinyint(number bigint) RETURNS tinyint(1)
return number;
但这在我的情况下是被禁止的(我的老板根本不想在数据库中保存函数)。现在我想创建一个临时表来存储这个查询的结果,但问题是我不知道如何做。有点像
create temporary table myDB.res (customfield1 tinyint(1).... ) as (put the select here)
这里的问题是 2。首先我不知道如何定义这个表的所有列,因为它应该具有与现有表相同的结构加上 3 个自定义列。即使我成功创建了这张表,它还能持续多久?。我可以查询此表以从中选择 * 吗?
我也对其他解决方案持开放态度。如果您需要其他详细信息,请告诉我
编辑:忘记提及这一点。 c# 部分应该保持不变。我想为我的数据表的那些特定列制作一个转换器,但这个解决方案也收到了一个很大的回应(我在一定程度上对它很好,如果我的 c# 代码应该只代表数据,而不应该知道任何事情关于数据库的结构)
最佳答案
你可以尝试这样的事情,虽然我认为它比添加一个函数更复杂:
CREATE TEMPORARY TABLE myTempTable LIKE theFirstTable;
ALTER TABLE myTempTable
ADD COLUMN customField1 TINYINT(1),
ADD COLUMN customField2 TINYINT(1),
ADD COLUMN customField3 TINYINT(1);
INSERT INTO myTempTable
SELECT o.*, customField1, customField2, customField3
FROM originalTable o...
显然,您必须根据需要自定义此方法,但优点是临时表将一直存在,直到连接关闭或您明确删除它。
关于c# - 我需要在 SELECT 的结果中添加一个 tinyint 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691726/