我有三個帶有公共密鑰字段的表,我需要將它們連接到這個鍵上。鑑於SQLite沒有完整的外部或右連接,我已經使用了full outer join without right join technique on Wikipedia,取得了很大的成功。SQLite中的三路全外連接
但我很好奇,如何使用此技術通過共同密鑰加入三個表?這個效率的影響是什麼(目前的查詢大概需要十分鐘)?
謝謝!
我有三個帶有公共密鑰字段的表,我需要將它們連接到這個鍵上。鑑於SQLite沒有完整的外部或右連接,我已經使用了full outer join without right join technique on Wikipedia,取得了很大的成功。SQLite中的三路全外連接
但我很好奇,如何使用此技術通過共同密鑰加入三個表?這個效率的影響是什麼(目前的查詢大概需要十分鐘)?
謝謝!
如果人們後來偶然發現,我最終嘗試在第一次加入後使用臨時表,然後加入到這個臨時表中。這成了一件麻煩事,所以我最終轉向了PostgreSQL(它有完整的外連接)。
您可以使用UNION SELECT創建包含所有鍵的臨時表。然後LEFT JOIN將這張臨時表的其他表格;
CREATE TABLE a (
tc INTEGER NOT NULL PRIMARY KEY,
v INTEGER
);
CREATE TABLE b (
tc NOT NULL PRIMARY KEY,
v INTEGER
);
CREATE TABLE c (
tc NOT NULL PRIMARY KEY,
v INTEGER
);
INSERT INTO a (tc, v) VALUES(1, 10);
INSERT INTO a (tc, v) VALUES(2, 20);
INSERT INTO a (tc, v) VALUES(4, 40);
INSERT INTO b (tc, v) VALUES(1, 100);
INSERT INTO b (tc, v) VALUES(3, 300);
INSERT INTO b (tc, v) VALUES(5, 500);
INSERT INTO c (tc, v) VALUES(1, 1000);
INSERT INTO c (tc, v) VALUES(3, 3000);
INSERT INTO c (tc, v) VALUES(7, 7000);
CREATE TEMP TABLE keys
AS
SELECT tc as tc FROM a
UNION
SELECT tc as tc FROM b
UNION
SELECT tc as tc FROM c;
SELECT k.tc, a.v, b.v, c.v
FROM keys as k
LEFT JOIN a ON (k.tc = a.tc)
LEFT JOIN b ON (k.tc = b.tc)
LEFT JOIN c ON (k.tc = c.tc);
更改數據庫引擎不是答案。 – peterdemin 2012-10-17 13:51:38