我有一个相当古怪的问题。在SELECT
语句中,我可以设置默认值吗?
在以下查询中,我希望boolItem
始终为false(不从数据库中检索)。疯了我知道但是当我解释原因时请忍受。
SELECT id, boolItem = False
FROM MyTable;
我正在使用大型现有SQL数据库和项目。我正在查询数据并将它们作为Action
C#对象返回。操作可以由用户或标准操作定制。这由属性IsCustom
表示。
public class Action
{
public int Id { get; set; }
public bool IsCustom { get; set; }
.....
}
在SQL数据库中,自定义操作存储在表custom_actions
中,标准操作位于表actions
中。
我使用以下代码检索并存储Action
个对象。我想查询actions
表总是将属性IsCustom
设置为false。并且custom_actions
表的查询始终将属性IsCustom
设置为true。我使用的查询SELECT a.id AS Id, a.is_custom = false AS IsCustom
不是有效的代码,因为该表没有is_custom
列,但它用于演示我要做的事情。
public async Task<IEnumerable<Models.Action>> ExecuteAsync (IDbConnection conn, IDbTransaction transition, long userId)
{
string sql = @"SELECT a.id AS Id, a.is_custom = false AS IsCustom
FROM actions a
INNER JOIN members_actions ma ON a.id = ma.action_id AND is_custom = false
WHERE ma.member_id = :userId
UNION
SELECT a.id AS Id, a.is_custom = true AS IsCustom
FROM custom_actions a
INNER JOIN members_actions ma ON a.id = ma.action_id AND is_custom = true
WHERE ma.member_id = :userId;";
return await conn.QueryAsync<Models.Action> (sql, new {userId = userId}, transition);
}
表&#39>行动&#39;列= id || description || name
表&#39; Custom_actions&#39;列= id || description || name || parameters
这可能吗?它比结构上更改数据库更好(将2个表合并为1并添加is_custom
列)。
答案 0 :(得分:2)
您只需选择值true
或false
并使用别名指定列名称IsCustom
例如,我修改了您的示例,以显示如何执行此操作(并且还从JOIN条件中删除了AND is_custom = false/true
,因为它没有显示任何一个is_custom
列表)。
public async Task<IEnumerable<Models.Action>> ExecuteAsync (IDbConnection conn, IDbTransaction transition, long userId)
{
string sql = @"SELECT a.id AS Id, false AS IsCustom
FROM actions a
INNER JOIN members_actions ma ON a.id = ma.action_id
WHERE ma.member_id = :userId
UNION
SELECT a.id AS Id, true AS IsCustom
FROM custom_actions a
INNER JOIN members_actions ma ON a.id = ma.action_id
WHERE ma.member_id = :userId;";
return await conn.QueryAsync<Models.Action> (sql, new {userId = userId}, transition);
}