【发布时间】:2020-02-22 23:23:22
【问题描述】:
我对 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 | bob1111@uky.edu |
| email | 93210 | tlbo232@uky.edu |
| facebook | 11111 | bob1111@facebook.com |
| facebook | 93210 | tlbo232@facebook.com |
| twitter | 11111 | twitter.com/bob.bobsley |
+----------+-------+-------------------------+
目标是打印出学生姓名、他们的电子邮件、顾问的姓名和他们的推特。所以是这样的:
+------------+-----------+-----------------+--------------------+-------------------+-------------------------+
| First Name | Last Name | Email | Advisor First Name | Advisor Last Name | Advisor Twitter |
+------------+-----------+-----------------+--------------------+-------------------+-------------------------+
| Bowen | Travis | tlbo232@uky.edu | 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';
输出应该显示两行,但其中一行没有 twitter,所以它不会显示。我正在寻找一种方式来展示它。
【问题讨论】: