简单的解决方案获得了接近你正在寻找
SELECT t1.id, t1.text, t2.text
FROM tbl_1 t1
INNER JOIN tbl_2 t2
ON t1.id = t2.id
这将创建输出
1 A x
1 B x
2 C y
2 C z
只有不同的是,现在是,应该以某种方式删除重复的文本x
和C
。
更新 前提:每个ID重复或者是在tbl_1或tbl_2不是两个!
除了上面的简单解决方案之外,加入分组选择将允许创建一种“CASE-Filters”来获得您想要的输出。
SELECT
t1.id,
CASE
WHEN t2.text = txt_i2 THEN t1.text
END AS txt_t1,
CASE
WHEN t1.text = txt_i1 THEN t2.text
END AS txt_t2
FROM (
SELECT
i1.id,
i1.text AS txt_i1,
i2.text AS txt_i2
FROM tbl_1 i1
INNER JOIN tbl_2 i2
ON i1.id = i2.id
GROUP BY id
) i
INNER JOIN tbl_1 t1
ON i.id = t1.id
INNER JOIN tbl_2 t2
ON t1.id = t2.id
您应该创建的视图tbl_1-tbl_2联接,以获得更多可读性SQL:
CREATE OR REPLACE VIEW V_tbl_1_2 AS (
SELECT
t1.id,
t1.text AS txt_1,
t2.text AS txt_2
FROM tbl_1 t1
INNER JOIN tbl_2 t2
ON t1.id = t2.id
)
;
SELECT
t.id,
CASE
WHEN t.txt_2 = i.txt_2 THEN t.txt_1
END AS txt_t1,
CASE
WHEN t.txt_1 = i.txt_1 THEN t.txt_2
END AS txt_t2
FROM V_tbl_1_2 t
INNER JOIN (
SELECT *
FROM V_tbl_1_2
GROUP BY id
) i ON t.id = i.id
;
你想拥有它完全一样? – alex 2011-02-28 08:39:13
是的,就像那样。 – mik 2011-02-28 08:50:56
你能解释一下逻辑吗?你的要求没有多大意义 - 为什么'A'只能连接到'x'而不是'f'?他们都有'id = 1'。为什么不'A-> f,B-> x' - 表中没有数据解释想要的结果的逻辑......当Galz指出你的问题仍然没有很好地定义时, – Galz 2011-02-28 10:19:32