2010-01-13 9 views
1

Как назначить псевдоним таблицам с SubSonic 2.1?Псевдоним таблицы в SubSonic

Я пытаюсь воспроизвести следующий запрос:

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" 

Я я использую дозвуковых 2.1 и обновление до 2.2 не вариант (пока). Благодарю.

+0

Хм, что случилось с Баунти? – RBarryYoung

+0

@RBarryYoung, базовая система SO Bounty, если нет принятого ответа при завершении бонуса, человек с самым высоким голосом получит награду. –

ответ

1

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

+0

Да, CodingHorror (или InlineQuery) будет работать, но также удалит цель использования ActionRecord. –

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") 
+0

Это вызовет ошибку из-за неоднозначности имен полей. –

+0

-1 OP ясно говорит, что обновление не является вариантом. Так что это не отвечает на вопрос ... –

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" 

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

+0

Вид - это верный вариант, который я рассмотрю. Однако я просто маринован, что SubSonic не может просто разрешить псевдоним ссылаться на имя таблицы? –

+0

Получил меня, SQL - это моя область знаний, а не SubSonic. – RBarryYoung

Смежные вопросы