【问题标题】:MySQL JOIN two tables with different number of rows by idMySQL JOIN 通过 id 连接两个具有不同行数的表
【发布时间】:2016-09-30 18:59:08
【问题描述】:

我有两张桌子。

Table 1

+----+--------+
| Id | Column |
+----+--------+
|  1 |     23 |
+----+--------+
|  2 |     34 |
+----+--------+
|  3 |     99 |
+----+--------+

Table 2

+----+--------+
| Id | Column |
+----+--------+
| 10 |      1 |
+----+--------+
| 11 |      1 |
+----+--------+
| 21 |      2 |
+----+--------+
| 33 |      3 |
+----+--------+

我想把这些表组合起来得到

Table 3 (Desired)

+--------+--------+
| Column | Column |
+--------+--------+
|     10 |     23 |
+--------+--------+
|     11 |     23 |
+--------+--------+
|     21 |     34 |
+--------+--------+
|     33 |     99 |
+--------+--------+

我知道如何得到这个:

Table 3 (Actual)

+--------+--------+
| Column | Column |
+--------+--------+
|     10 |     23 |
+--------+--------+
|     11 |   null |
+--------+--------+
|     21 |     34 |
+--------+--------+
|     33 |     99 |
+--------+--------+

但是当行有重复的 Id 列时,第一个是正确的值,并且 其余的始终为 NULL。

我必须生成表 3 的查询是

SELECT table2.id, table1.Column 
FROM table2 
LEFT JOIN (SELECT .... ) as table1 ON table1.id = table2.Column

如何加入表以获得正确版本的表 3?

【问题讨论】:

  • 欢迎来到 Stack Overflow!请通过添加适当的标记(Oracle、SQL Server、MySQL 等)来指定您要定位的 RDBMS。可能有一些答案利用了不受普遍支持的语言或产品功能。此外,通过使用特定的 RDBMS 对其进行标记,您的问题可能会受到更适合回答的人的关注。
  • 在你想要的结果中:10 -------- 23 的行不应该是11 -------- 23
  • 对我来说,您的查询工作正常。 NULL 值表明,Table2 有一行 ID = 10 和 Column = Table1.ID 中不存在的值
  • 我弄错了 11 -------- 23 11 -------- 23

标签: sql select join


【解决方案1】:

这应该可以正常工作:

SELECT 
  t2.id     AS column1,
  t1.column AS column2
FROM table2 AS t2
LEFT JOIN table1 AS t1 ON t1.id = t2.column;

在这里查看它的实际效果:

这将为您提供您想要的相同结果:

| COLUMN1 | COLUMN2 |
---------------------
|      10 |      23 |
|      11 |      23 |
|      21 |      34 |
|      33 |      99 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多