Псевдоним таблицы в SubSonic
Как я могу назначить псевдоним для таблиц с 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 ответа
Существует ли функциональность CodingHorror в 2.1? В документации говорится, что он в категории 2.x.
Используйте представление:
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.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")