学习mysql,JOIN查询

时间:2021-06-15 13:19:43

标签: mysql sql

我是 MYSQL 数据库的初学者,我正在尝试使用查询和关系。

我创建了 2 个表,一个是 'users',其中包含字段 staff_ID,另一个是 'reports',其中还包含提交报告的用户的表字段 staff_ID。

关于关系(见图),我已经连接了 2 个员工 ID 字段。

relation

每个用户可以提交多个报告,因此我尝试查询并仅获取一个用户(staff_ID)的报告。 我知道我必须使用 JOIN 关键字才能获取数据..

我尝试了以下查询,但它给了我所有用户的所有结果。

SELECT u.staff_ID
     , u.Name
     , r.id_report_show
     , r.date_report 
  FROM users u
  JOIN reports r 
    ON r.staff_ID = u.staff_ID

但我只想得到一个特定用户的报告,比如 staff_ID = 04033

可能我理解错了这个查询 JOIN 是如何工作的,我正在寻找一些帮助。

谢谢

2 个答案:

答案 0 :(得分:2)

你快到了。你的加入是完美的。你只需要一个 where 子句。

    SELECT users.staff_ID, users.Name, reports.id_report_show, reports.date_report 
    FROM `users` INNER JOIN reports ON reports.staff_ID = users.staff_ID
    where users.staff_ID = 04033

或者你也可以在 on 子句中提及:

      SELECT users.staff_ID, users.Name, reports.id_report_show, reports.date_report 
      FROM `users` INNER JOIN reports 
      ON reports.staff_ID = users.staff_ID and users.staff_ID = 04033

由于是内连接,所以两个查询都会产生相同的输出。但是对于左连接,这些可能会产生不同的结果。最好使用 where 子句,而不是在 on 子句中提及条件。

答案 1 :(得分:0)

您可以使用 inner 连接或 where 子句执行此操作:

SELECT users.staff_ID
     , users.Name
     , reports.id_report_show
     , reports.date_report
FROM `users`
INNER JOIN reports
    ON reports.staff_ID = users.staff_ID
    AND reports.staff_ID = 04033

SELECT users.staff_ID
     , users.Name
     , reports.id_report_show
     , reports.date_report
FROM `users`
INNER JOIN reports
    ON reports.staff_ID = users.staff_ID
WHERE users.staff_ID = 04033

inner 连接只会拉取两个表中匹配的记录。 where 子句将从您在 whereusersreports)中使用的任何表中提取所有记录,并根据您使用的联接类型执行联接逻辑.

您可以在两个位置使用任一表中的 staff_ID