以下是两个表{PERSONS, CONTACTS
}
我希望从这两个表中得到以下结果
PersonID | Name
1 | A
2 | B
3 | C
4 | D
5 | E
表Contacts
:
ContactID | PersonID | Type | Contact
1 | 1 | p | 051-001
2 | 1 | e | A@
3 | 2 | p | 051-002
4 | 2 | e | B@
5 | 3 | p | 051-003
6 | 4 | p | 051-004
7 | 4 | e | D@
期望的结果输出:
Name | Contact
A | 051-001
B | 051-002
C | 051-003
D | 051-004
E | NULL
请查看小提琴这个问题 SQLfiddle for Problem
答案 0 :(得分:6)
在这里。您是否需要左连接才能从Persons
获取所有行。此外,在on
条件下,您可以过滤Type = 'c'
SELECT P.Name, C.Contact
FROM PERSONS P
left outer join CONTACTS C
on C.Type = 'p' and
P.PersonId = C.PersonId
order by P.Name
答案 1 :(得分:5)
不确定为什么你不想要左连接,但这是使用子查询。
SELECT
Name,
(SELECT Contact
From Contacts c
WHERE c.Type = 'p' And c.PersonId = p.PersonID)
As Contact
FROM
PERSONS p
答案 2 :(得分:4)
Select p.Name, c.Contact
from Persons p
left join Contacts c
on p.PersonId = c.Personid
Where Type = 'p' or c.Contact is null
Order by p.Name
答案 3 :(得分:2)
另一种不寻常的方法;)它不是最好的regexp
。但它确实适合你的情况。
select distinct p.name, c.contact
from
persons p
left join
contacts c
on p.personid = c.personid
where c.contact is null or
c.contact like '[0-9]%'
;
结果:
NAME CONTACT
A 051-001
B 051-002
C 051-003
D 051-004
E (null)