2015-02-23 40 views
0

我想在sqlite上定義一個動態別名(以便獲得最通用的SQL查詢)。SQLite動態別名

我有兩個表T1 & T2

T1結構:

id|url|type 

T2結構:

id|us|es|fr|de|nl 

我的請求如下:

SELECT t1.*,us as name FROM t1 INNER JOIN t2 ON (t1.id = t2.id) ORDER BY t1.id ASC; 

W¯¯我想要做的帽子是有一個別名(例如:名稱),它給了我正確的t2.us與id匹配的值,除非類型id爲1.

例如,我在每個表中有兩個條目:

id|url|type 
1|http://www.google.com/|0 
2|file:///tmp/file.txt|1 

和T2的:

id|us|es|fr|de|nl 
1|love|amar|amour|die liebe|liefde 
2|sugar|azucar|sucre|zucker|suiker 

我想有這樣的事情:

id|url|type|name 
1|http://www.google.com/|0|love 
2|file:///tmp/file/txt|1|file:///tmp/file/txt 

在典型的情況下, e是0,在t2表中做一個研究。 在類型爲1的情況下,只需將「url」字段作爲名稱。

不知道是否清楚,以及SQLite是否可行。 我想避免以編程方式執行此操作(使用C語言)。

感謝

回答

1

這聽起來像你正在尋找一個條件語句來選擇要顯示什麼樣的列:

SELECT 
    t1.*, 
    CASE WHEN TYPE = 1 THEN url ELSE us END AS name 
FROM t1 
INNER JOIN t2 ON (t1.id = t2.id) 
ORDER BY t1.id ASC; 

輸出示例:

| id |     url | type |     name | 
|----|------------------------|------|----------------------| 
| 1 | http://www.google.com/ | 0 |     love | 
| 2 | file:///tmp/file.txt | 1 | file:///tmp/file.txt | 

Sample SQL Fiddle

+1

這就是它!非常感謝。 :) – Lazao 2015-02-23 11:39:30

+0

我忘了問我是否可以做一個有條件的JOIN。在類型= 1的情況下,我想避免執行JOIN?因爲如果t2表中的id爲1的條目中只有1條,sql請求將只顯示1條目,因爲如果id = 2,連接將失敗(t1.id = t2.id)。 – Lazao 2015-02-23 13:35:35

+0

@Lazao不確定我理解,但嘗試將'INNER JOIN'改爲'LEFT JOIN' – jpw 2015-02-23 14:03:57