我有兩個表幾乎相同,表示來自服務器的數據和用戶輸入的數據。我想向用戶顯示來自兩者的組合數據的列表,合併任何一個文本列值的重複值。當選擇一行時,我需要能夠訪問子表中的數據,所以需要主鍵和哪個表是鍵。兩個表的聯合創建視圖,合併行
這兩個表在(fk_id,column_a)上都有唯一的約束。
服務器表:
_id | fk_id | column_a
----------------------
1 | 1 | val 1
2 | 1 | val 2
3 | 2 | val 3
用戶輸入表:
_id | uuid | fk_id | column_a
-----------------------------
1 | xxxx | 1 | val 1
2 | xxxx | 1 | val 4
3 | xxxx | 2 | val 5
搜索結果我需要那麼將是:
_id | server_id | user_id | fk_id | column_a
--------------------------------------------
1 | 1 | 1 | 1 | val 1
2 | 2 | | 1 | val 2
3 | 3 | | 2 | val 3
2 | | 2 | 1 | val 4
3 | | 3 | 2 | val 5
其實我不關心什麼是結果集的_id列,但我需要_id,因爲我在Android中使用CursorAdaptor。
我希望能做到這一點使用這樣的觀點:
CREATE VIEW all_values AS
SELECT
_id, _id AS server_id, 0 AS user_id, fk_id, column_a
FROM
server_table
UNION SELECT
_id, 0 AS server_id, _id AS user_id, fk_id, column_a
FROM
user_table
ORDER BY column_a;
,我可以查詢這樣的:
SELECT * FROM all_values WHERE fk_id = ?
這是可能使用UNION辦? UNION不會包含重複項,並且UNION ALL將包含所有值。有沒有合併重複的方法,或者我需要做一個基於column_a的值的連接?
是的,但是您必須在兩個SELECT中都具有相同的字段(如果是整數或'AS',則添加'0 AS myMissingField' AS MyMi sFieldField「,如果它是一個字符串,則返回UNION中的任何SELECT,這些SELECT錯誤地忽略了另一個表中的某些字段)。並請刪除不必要的字符串分隔符(**'**) –
因此,使用UNION將合併這兩個結果行?我已經在問題中編輯了CREATE VIEW語句來反映這一點。 – asorenson
是的,正確的。 'UNION'將合併排除最終的重複。 'UNION ALL'也將包含這些。 –