我是 MYSQL 数据库的初学者,我正在尝试使用查询和关系。
我创建了 2 个表,一个是 'users',其中包含字段 staff_ID,另一个是 'reports',其中还包含提交报告的用户的表字段 staff_ID。
关于关系(见图),我已经连接了 2 个员工 ID 字段。
每个用户可以提交多个报告,因此我尝试查询并仅获取一个用户(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 是如何工作的,我正在寻找一些帮助。
谢谢
答案 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
子句将从您在 where
(users
或 reports
)中使用的任何表中提取所有记录,并根据您使用的联接类型执行联接逻辑.
您可以在两个位置使用任一表中的 staff_ID
。