【问题标题】:Table Alias in SubSonicSubSonic 中的表格别名
【发布时间】:2010-01-13 01:24:58
【问题描述】:

如何使用 SubSonic 2.1 为表分配别名?

我正在尝试重现以下查询:

SELECT *
FROM posts P
RIGHT OUTER JOIN post_meta X ON P.post_id = X.post_id
RIGHT OUTER JOIN post_meta Y ON P.post_id = Y.post_id
WHERE X.meta_key = "category"
    AND X.meta_value = "technology"
    AND Y.meta_key = "keyword"
    AND Y.meta_value = "cloud"

我正在使用 SubSonic 2.1 并且升级到 2.2 不是一个选项(目前)。谢谢。

【问题讨论】:

  • 嗯,赏金怎么了?
  • @RBarryYoung,基于 SO 赏金系统,如果赏金结束时没有接受答案,投票最高的人将获得赏金。

标签: .net sql subsonic table-alias


【解决方案1】:

CodingHorror 功能是否存在于 2.1 中?它在文档中声明它属于 2.x 类别。

【讨论】:

  • 是的,CodingHorror(或 InlineQuery)会起作用,但这也消除了使用 ActionRecord 的目的。
【解决方案2】:

使用视图:

CREATE VIEW post_meta2 AS SELECT * FROM post_meta

那么你的查询变成:

SELECT *
FROM posts
RIGHT OUTER JOIN post_meta ON posts.post_id = post_meta.post_id
RIGHT OUTER JOIN post_meta2 ON posts.post_id = post_meta2.post_id
WHERE post_meta.meta_key = "category"
    AND post_meta.meta_value = "technology"
    AND post_meta2.meta_key = "keyword"
    AND post_meta2.meta_value = "cloud"

是的,我知道,这很粗糙。但还是有效的。如果您想要优雅,请按照已经建议的方式升级,否则这对于临时解决方法应该足够了。

【讨论】:

  • 查看是我会考虑的有效选项。但是我只是觉得 SubSonic 不能简单地允许引用表名的别名?
  • 知道了,SQL 是我的专业领域,而不是 SubSonic。
【解决方案3】:

我认为如果你只在 subsonic 2.2 中使用就可以了。你应该认真考虑升级。 2.2 版有更多好东西可以让您的生活更美好。

subsonic.select().from("posts p")
        .RightOuterJoin("post_meta","post_id","posts","post_id")
        .RightOuterJoin("post_meta","post_id","posts","post_id")
        .Where("post_meta.meta_key").IsEqualTo("category")
        .And("post_meta.meta_value").IsEqualTo("technology")
        .And("post_meta.meta_key").IsEqualTo("keyword")
        .And("post_meta.meta_value").IsEqualTo("cloud")

【讨论】:

  • -1 OP 明确表示升级不是一种选择。所以这并不能回答问题......
猜你喜欢
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多