SubSonic中的表别名

时间:2010-01-13 01:24:59

标签: .net sql subsonic table-alias

如何为使用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不是一个选项(尚未)。感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用视图:

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"

是的,我知道,这很粗糙。但仍然有效。如果你想要优雅,那么就像已经建议的那样升级,否则这应该足以用于临时解决方法。

答案 2 :(得分:0)

我认为如果你只是在亚音速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")