gpt4 book ai didi

mysql - sql查询问题

转载 作者:行者123 更新时间:2023-11-29 14:53:45 24 4
gpt4 key购买 nike

我有 table

表1

id text
1 A
1 B
2 C

表2

id text
1 x
1 f
2 y
2 z

我想通过这种方式加入他们

1 A x
1 B f
2 C y
2 z

换句话说,我想查看 table1 和 table2 中按 id 分组的所有文本,没有重复。有什么想法吗?

更新:正如他们在评论中所说,逻辑不清楚,我会尽力解释。我在 table_1 中有当前值,在 table_2 中有已删除的值。客户希望在一个表中查看按某个 ID 分组的当前值和已删除的值。

最佳答案

简单的解决方案即可获得接近您正在寻找的内容

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

唯一不同的是现在重复的文本 xC 应该以某种方式删除。

更新前提条件:每个 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-join 的 View 以获得更具可读性的 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
;

关于mysql - sql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com