【问题标题】:How to join two tables such that same column from both the tables are not repeated? [duplicate]如何连接两个表,使两个表中的同一列不重复? [复制]
【发布时间】:2020-06-15 15:04:01
【问题描述】:

我有以下两张表

Table 1: employee
+----+---------+--------+--------+------+-------+------+----------+
| No | Name    | Salary | Zone   | Age  | Grade | Dept | HireDate |
+----+---------+--------+--------+------+-------+------+----------+
|  1 | Mukul   |  30000 | West   |   28 | A     |   10 | NULL     |
|  2 | Kritika |  35000 | Centre |   30 | A     |   10 | NULL     |
|  3 | Naveen  |  35200 | West   |   40 | B     |   20 | NULL     |
|  4 | Uday    |  41800 | North  |   38 | C     |   30 | NULL     |
|  5 | Nupur   |  32000 | East   |   26 | B     |   20 | NULL     |
|  6 | Moksh   |  37000 | South  |   28 | B     |   10 | NULL     |
|  7 | Shelly  |  36000 | North  |   26 | A     |   30 | NULL     |
+----+---------+--------+--------+------+-------+------+----------+

Table 2:department
+------+---------+--------+--------+------+
| Dept | Dname   | Minsal | Maxsal | HoD  |
+------+---------+--------+--------+------+
|   10 | Sales   |  25000 |  32000 |    1 |
|   20 | Finance |  30000 |  50000 |    5 |
|   30 | Admin   |  25000 |  40000 |    7 |
+------+---------+--------+--------+------+

假设我想显示在销售部门工作的所有员工的详细信息。
我试过INNER JOIN

SELECT *
FROM employee AS A
INNER JOIN department AS B
ON A.Dept = B.Dept AND B.Dname = "Sales";

这显示了这个表

+----+---------+--------+--------+------+-------+------+----------+------+-------+--------+--------+------+
| No | Name    | Salary | Zone   | Age  | Grade | Dept | HireDate | Dept | Dname | Minsal | Maxsal | HoD  |
+----+---------+--------+--------+------+-------+------+----------+------+-------+--------+--------+------+
|  1 | Mukul   |  30000 | West   |   28 | A     |   10 | NULL     |   10 | Sales |  25000 |  32000 |    1 |
|  2 | Kritika |  35000 | Centre |   30 | A     |   10 | NULL     |   10 | Sales |  25000 |  32000 |    1 |
|  6 | Moksh   |  37000 | South  |   28 | B     |   10 | NULL     |   10 | Sales |  25000 |  32000 |    1 |
+----+---------+--------+--------+------+-------+------+----------+------+-------+--------+--------+------+

如您所见,Dept 列显示了两次。
所以这是我的问题
1. 同名列如何只显示一次?
2. 除了INNER JOIN 之外,还有什么方法可以做到这一点,即有更好的方法吗?

【问题讨论】:

  • 你需要更具体。你期望什么输出?
  • @juergend 我已经编辑了问题并包含了输出,但 Dept 列显示了两次。我希望它只显示一次。
  • SELECT A.*, B.Dname, B.Minsal, B.Maxsal, B.HoD FROM ...
  • @Nick 是的,这完成了工作。谢谢。

标签: mysql


【解决方案1】:

您需要指定所需的列,而不是使用* 选择所有内容。您还可以将* 限制为单个表的所有列。示例:

SELECT e.*, d.Dname, d.HoD  
FROM employee AS e
INNER JOIN department AS d ON e.Dept = d.Dept 
WHERE d.Dname = "Sales";

【讨论】:

    【解决方案2】:

    像这样:

    select A.No, A.Name, A.Salary, A.Zone, A.Age, A.Grade, A.Dept, A.HireDate,
       B.Dname, B.Minsal, B.Maxsal, B.HoD
    (...)
    

    内连接是正确的连接方式。这边没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2020-03-08
      • 2013-12-14
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多