0

我有 2 张桌子:

`tb_a` :         `tb_b`

========         ========
|id|key|         |id|key|
========         ========
| 1|  A|         | 1|  D|
| 2|  B|         | 2|  E|
| 3|  C|         | 3|  F|
| 4|  B|         | 4|  B|
========         | 5|  A|
                 | 6|  G|
                 ========

我想keytb_a和联合起来tb_b。所以结果必须是 = ABCDEFG。

我尝试过的代码是:

SELECT id, key
  FROM tb_a
UNION ALL 
SELECT id, key
  FROM tb_b
ORDER BY id

但它似乎不起作用。

4

6 回答 6

1

不要id在查询输出中使用字段,因为它会阻止将输出分组key。也不要使用UNION ALLUNION而是使用:

SELECT  `key` 
FROM tb_a
UNION 
SELECT  `key` 
FROM tb_b
于 2012-09-23T03:56:17.570 回答
0
SELECT DISTINCT `key` FROM (
  SELECT key FROM tb_a
  UNION
  SELECT key FROM tb_b
) AS t ORDER BY `key`
于 2012-09-23T03:59:15.873 回答
0

你需要CONCAT像这样在你的 sql 查询中使用:

SELECT tb_a.id, tb_b.id, CONCAT(tb_a.key,tb_b.key) as Combined_key
FROM tb_a, tb_b
ORDER BY tb_a.id, tb_b.id
于 2012-09-23T03:25:50.067 回答
0

如果您遇到的问题是重复值,那是因为 UNION ALL。单独使用 UNION。

于 2012-09-23T03:29:07.753 回答
0

连接不直接映射到集合论的基本加法运算(并、交、差),它通过简单地包含或排除其他集合的元素来创建新集合。有一些方法可以在 SQL 中获得这些,但它涉及链接 UNION 和 MINUS 语句。

相反,连接是映射操作,它根据一组规则从每个集合中获取一个元素,并将它们集中在一个新元素中,新集合实际上本身就是一个包含原始两个元素的小集合其他集合中的元素。

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

请注意,UNION 中的每个 SELECT 语句必须具有相同数量的列。这些列还必须具有相似的数据类型。此外,每个 SELECT 语句中的列的顺序必须相同。

注意:默认情况下,UNION 运算符仅选择不同的值。要允许重复值,请使用 UNION ALL。

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

好读

SQL 连接的可视化解释 - 编码恐怖

于 2012-09-23T03:37:35.143 回答
0
SELECT GROUP_CONCAT(`key` ORDER BY `key` SEPARATOR '') AS 'key'
FROM (
    SELECT `key` FROM tb_a
    UNION
    SELECT `key` FROM tb_b
) a
GROUP BY NULL

编辑:我的错。这里:

SELECT * FROM (
    SELECT `id`,`key` FROM tb_a
    UNION
    SELECT `id`,`key` FROM tb_b
) tb_ab
GROUP BY `key`
ORDER BY `key`

虽然,您的答案尚不清楚应根据哪个标准id来确定。

于 2012-09-23T03:43:28.413 回答