Псевдоним таблицы в SubSonic - PullRequest
1 голос
/ 13 января 2010

Как я могу назначить псевдоним таблицам с 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 ]

1 голос
/ 21 января 2010

Использовать вид:

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"

Да, я знаю, это грубо. Но, тем не менее, эффективен. Если вы хотите элегантности, то обновите, как уже было предложено, в противном случае этого должно быть достаточно для временного решения проблемы.

1 голос
/ 18 января 2010

Существует ли функциональность CodingHorror в 2.1? В документации указано, что он относится к категории 2.x.

0 голосов
/ 19 января 2010

Я думаю, что если вы просто используете в дозвуковой 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")
...