比如我有两张table
Person Table
ID : Name
1 : Bob
2 : Jane
3 : Mike
4 : John
5: Mary
我还有(current实际上是一个整数,但我使用文本使它更可读):
Job Table
ID : Name : PersonID : JobStatus
1 : Plumber : 1 : current
2 : Doctor : 2 : past
3 : Driver : 2 : current
4 : Cook : 3 : current
5: Programmer : 5 : past
我想把这两个表连接起来,这样我就可以得到每个人的列表,但我只想用左连接包含当前作业。换句话说,我希望结果是:
Bob : Plumber : current
Jane : Driver : current
Mike : Cook : current
John : :
Mary : :
我怎么能用join来做呢。我试着做:
SELECT
person.name, job.name, job.status
FROM
person
LEFT JOIN
job ON person.id=job.person.id
但问题是,在这种情况下,我会看到简的两个条目,一个是她过去的医生工作,另一个是她的新司机工作。如果我加上where子句,比如:
WHERE job.status='current'
然后就把约翰和玛丽从名单上删除了。
如何编写一个join来显示所有人,但只包含当前的工作?
4条答案
按热度按时间hs1ihplo1#
至少在oracle中,您应该能够做到:
那什么时候
person.id=job.person.id AND job.status = 'current'
连接被建立,当这个条件为false时,你只得到person
数据。我不知道mysql是否支持
ON
但我想是的,这并不是什么突破性的技术。更新:
看起来它是受支持的,请阅读https://dev.mysql.com/doc/refman/8.0/en/join.html
biswetbf2#
试试这个
s8vozzvw3#
你能试试这个查询吗?
kognpnkq4#
有几种方法可以做到这一点;最佳选择取决于您的数据库以及不同方法的执行方式。
方法一:用或左连接
方法2:使用union all的两个查询(这将删除没有当前VAL或空VAL的行)
方法2b:使用union all的两个查询(这将保留没有当前VAL或空VAL的行)
方法3:子选择