2010-01-13 62 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 2010-01-22 16:03:51

+0

@RBarryYoung,基於SO賞金系統,如果在賞金結束時沒有被接受的答案,最高票數的人會收到賞金。 – 2010-01-23 06:33:53

回答

1

2.1中是否存在CodingHorror功能?它在文檔中聲明它在2.x類別中。

+0

是的,CodingHorror(或InlineQuery)可以正常工作,但這也會消除使用ActionRecord的目的。 – 2010-01-20 01:09:49

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

由於字段名稱不明確,會引發錯誤。 – 2010-01-20 01:10:41

+0

-1 OP明確表示升級不是一種選擇。所以這不回答這個問題... – 2010-01-21 00:07:48

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不能簡單地允許別名引用表名稱? – 2010-01-21 00:25:30

+0

得到我,SQL是我的專業領域,而不是SubSonic。 – RBarryYoung 2010-01-21 22:22:22