어떻게 특정 값이없는 행을 표시하려면?

트래비스 보웬 :

나는 SQL 비교적 새로운 오전 나는 그것을위한 테이블에 값을 추가하지 않고 특정 값이없는 행을 표시해야합니다. 내가 함께 일하고 테이블은 다음과 같습니다 :

 Select * from PERSON;
+-------+-------+---------+--------+---------+----------+
| idnum | fname | lname   | rname  | private | linkblue |
+-------+-------+---------+--------+---------+----------+
| 11111 | Bob   | Bobsley | Robert |       0 | bob1111  |
| 93210 | Bowen | Travis  | Luke   |       1 | tlbo232  |
+-------+-------+---------+--------+---------+----------+
Select * from ADVISOR;
+---------+---------+-------+-------+ You can ignore the sdate and edate
| student | advisor | sdate | edate |
+---------+---------+-------+-------+
|   11111 |   93210 | NULL  | NULL  |
|   93210 |   11111 | NULL  | NULL  |
+---------+---------+-------+-------+
Select * from DIGITAL;
+----------+-------+-------------------------+
| smtype   | idnum | smaddr                  |
+----------+-------+-------------------------+
| email    | 11111 | [email protected]         |
| email    | 93210 | [email protected]         |
| facebook | 11111 | [email protected]    |
| facebook | 93210 | [email protected]    |
| twitter  | 11111 | twitter.com/bob.bobsley |
+----------+-------+-------------------------+

목표는 학생, 이메일,지도 교수의 이름과 트위터의 이름의 이름을 인쇄 출력하는 것입니다. 이 같은 그래서 :

+------------+-----------+-----------------+--------------------+-------------------+-------------------------+
| First Name | Last Name | Email           | Advisor First Name | Advisor Last Name | Advisor Twitter         |
+------------+-----------+-----------------+--------------------+-------------------+-------------------------+
| Bowen      | Travis    | [email protected] | Bob                | Bobsley           | twitter.com/bob.bobsley |
+------------+-----------+-----------------+--------------------+-------------------+-------------------------+

어떤에서 온다 :

select 
    P.fname as 'First Name', 
    P.lname as 'Last Name', 
    D.smaddr as 'Email', 
    AdivsorList.fname as 'Advisor First Name',
    AdivsorList.lname as 'Advisor Last Name', 
    AdivsorList.smaddr as 'Advisor Twitter' 
from PERSON P 
LEFT OUTER JOIN DIGITAL D ON P.idnum = D.idnum 
LEFT OUTER JOIN (
    SELECT P1.fname, P1.lname, A.advisor, D1.smaddr, D1.smtype
    from ADVISOR A 
    LEFT OUTER JOIN PERSON P1 ON A.student = P1.idnum 
    LEFT OUTER JOIN DIGITAL D1 ON P1.idnum = D1.idnum
) as AdivsorList ON P.idnum = AdivsorList.advisor 
where D.smtype = 'email' AND AdivsorList.smtype = 'twitter';

출력은 두 행을 표시해야하지만 표시하지 않을 수 있도록 행 중 하나는 트위터가 없습니다. 나는 그것을 보여줄 수있는 방법을 찾고 있어요.

GMB :

즉 일련의와 함께 할 수 left join의 :

select
    ps.fname  student_fname,
    ps.lname  student_lname,
    ds.smaddr student_email
    pa.fname  adviser_fname,
    pa.lname  adviser_lname,
    da.smaddr advisor_twitter
from person ps
left join advisor a  on a.student = ps.idnum
left join person  pa on pa.idnum  = a.advisor
left join digital ds on ds.idnum  = ps.idnum and ds.smtype = 'email'
left join digital da on da.idnum  = pa.idnum and da.smtype = 'twitter'

추천

출처http://10.200.1.11:23101/article/api/json?id=5740&siteId=1