gpt4 book ai didi

mysql - subsonic 2 连接多列

转载 作者:行者123 更新时间:2023-11-29 15:02:35 25 4
gpt4 key购买 nike

我想将以下语句转移到 SubSonic 2.2

    SELECT b.*
FROM tableA a
INNER JOIN tableB b
ON (a.year = b.year AND a.month = b.monath AND a.userid = b.userid);

我的问题是 SubSonic 的 SqlQuery.LeftInnerJoin() 命令没有重载,需要多列。

由于任何联接只能使用 where 子句重写,因此我在 sql 中执行了以下操作:

    SELECT b.*
FROM tableA a, tableB b
WHERE a.year = b.year
AND a.month = b.month
AND a.userid = b.userid

它应该提供相同的结果(事实上,至少对于mysql来说,这些语句在逻辑上绝对没有区别)。

但我在将其转换为亚音速时也遇到了困难,因为“IsEqualTo(...)”成员足够聪明,可以找出我的参数是一个字符串并将其放入引号中。

DB.Select("TableB.*")
.From<TableA>()
.From<TableB>()
.Where(TableA.YearColumn).IsEqualTo("TableB.Year")
.And(TableA.MonthColumn).IsEqualTo("TableB.Month")
.And(TableA.UseridColumn).IsEqualTo("TableB.UserId")

(我尝试了不同的方法来设置 IsEqualTo 参数)

IsEqualTo(TableB.YearColumn)
IsEqualTo(TableB.YearColumn.QualifiedName)

参数被解释为

TableA.Year = 'TableB.Year'

或者我得到一个 SqlQueryException。

有人可以告诉我如何使用亚音速执行此查询(第一个 - 使用 JOIN 或第二个)?谢谢

最佳答案

使用 SubSonic 2 开箱即用,您就做不到。

也就是说,您有以下选择:

延长亚音速

如果您已经熟悉 SubSonic,您可以考虑向 SubSonic 本身添加多列联接。

使用 View 、存储过程、表函数

如果您不想弄乱 SubSonics 代码,请使用 SQL Server 中的 View 、存储过程和/或表函数。 SubSonic 可以轻松地从 View 和存储过程访问数据。

使用 InlineQuery

InlineQuery允许您执行任何 sql - 如果您可以选择在代码中使用裸 sql。

InlineQuery 的丑陋解决方法

如果您绝对想使用 SubSonic 创建查询,您可以尝试以下操作:

SqlQuery q = DB.Select()
.From<TableA>()
.CrossJoin<TableB>()
.Where(TableA.YearColumn).IsEqualTo(0)
.And(TableA.MonthColumn).IsEqualTo(0)
.And(TableA.UseridColumn).IsEqualTo(0);

构建 SQL 语句,并替换参数名称:

string s = q.BuildSqlStatement();
s = s.Replace(q.Constraints[0].ParameterName, TableB.YearColumn.QualifiedName);
s = s.Replace(q.Constraints[1].ParameterName, TableB.MonthColumn.QualifiedName);
s = s.Replace(q.Constraints[2].ParameterName, TableB.UserIdColumn.QualifiedName);

然后将 s 与 InlineQuery 一起使用。

关于mysql - subsonic 2 连接多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com