迷失于SQL,挑战“识别”

问题描述 投票:0回答:1

我正在尝试解决 Lost at SQL 中的挑战。给出了 3 个数据库:

1 _“开始日期”。该数据集为您提供有关员工的宝贵信息,包括他们的身份证号、出生日期 (DOB)、就业开始日期以及他们当前的就业状态。这似乎是一个很有前途的信息来源,可以帮助您拼凑出谜题。

2_“旧数据库”。该数据库包含有关员工及其先前职业的过时信息。虽然它可能不像您希望的那样最新,但它仍然可以提供有关员工的历史及其过去角色的一些有价值的见解。

3_“新数据库”。该数据集似乎更新了,包含有关员工及其当前就业状态的更新信息。它似乎是一个最新数据的金矿,有可能填补旧数据库留下的空白。

START_DATES -> id_number、date_of_birth、employment_start_date、employed_or_departed

NEW_DATABASE -> id_number、full_name、date_of_birth、职业

OLD_DATABASE -> 名字、姓氏、身份证号、出生日期、职业

获取一个包含 Full_Name、employment_start_date、 最新职业和先前职业。应将其过滤为 只是在 new_database 中扮演与他们不同的角色的船员 在 old_database 中执行操作并且仍在工作中。

为了解决这个问题我尝试了不同的 JOIN

SELECT full_name AS Full_Name, a.occupation AS latest_occupation, b.occupation AS previous_occupation, employment_start_date
FROM new_database 
FULL OUTER JOIN old_database b ON b.occupation <> a.occupation
FULL OUTTER start_dates c ON a.id_number = c.id_number
WHERE employed_or_departed = 'Employed'

这给了我一个相同名字的列表,这些名字在所有不同的角色中重复了很多次。但这不是正确的答案。 我也试过了

SELECT full_name AS Full_Name, a.occupation AS latest_occupation, b.occupation AS previous_occupation, employment_start_date
FROM new_database 
FULL OUTER JOIN old_database b ON a.id_number = b.id_number
FULL OUTTER start_dates c ON a.id_number = c.id_number
WHERE employed_or_departed = 'Employed' AND a.occupation<>b.occupation

我还可以尝试什么来获得正确答案?我错过了什么?

sql left-join full-join
1个回答
0
投票

我不知道为什么在这种情况下使用

FULL OUTER JOIN
,而你可以在这里简单地使用
INNER JOIN
。这是查询:

SELECT
    nd.full_name AS Full_Name,
    sd.employment_start_date,
    nd.occupation AS latest_occupation,
    od.occupation AS previous_occupation
FROM
    start_dates sd
INNER JOIN
    new_database nd ON sd.id_number = nd.id_number
INNER JOIN
    old_database od ON nd.id_number = od.id_number
WHERE
    sd.employed_or_departed = 'Employed'
    AND nd.occupation <> od.occupation;

您可以在此处查看示例小提琴

© www.soinside.com 2019 - 2024. All rights reserved.