Как вывести только определенные элементы из столбца в sql - PullRequest
2 голосов
/ 23 февраля 2020

Я пишу внешнее объединение в sql для поиска по нескольким таблицам, и код в основном работает, за исключением того, что мне нужно, чтобы он возвращал только ссылку на твиттер людей, так что если у них есть другие социальные сети в списке или вообще нет социальных сетей должен вернуть ноль, но сейчас он возвращает только твиттер для некоторых, но он возвращает ноль для некоторых имен, которые имеют твиттер. Я точно знаю, в чем проблема, я думаю, в операторах on есть и хорошо, если нет советника, он будет нулевым, а если у этого человека есть твиттер, то одно значение равно нулю, а другое - нет, поэтому оно возвращает ноль. Это единственная проблема, о которой я могу думать, но когда я использую или она возвращает слишком много результатов, а некоторые ошибаются. Поэтому я не знаю, как это исправить.

select fname, lname, rname, advisor_name, smaddr
from PERSON
join ADVISOR on PERSON.idnum = ADVISOR.student
left join DIGITAL on ADVISOR.student = DIGITAL.idnum and DIGITAL.smtype = 'twitter'
union
select fname,lname, rname, advisor_name, smaddr
from PERSON
left join ADVISOR on PERSON.idnum = ADVISOR.student
left join DIGITAL on ADVISOR.student = DIGITAL.idnum and
DIGITAL.smtype = 'twitter';

Текущий вывод:

+----------+---------+-------------------------+---------------+---------------------------+
| fname    | lname   | rname                   | advisor_name  | smaddr                    |
+----------+---------+-------------------------+---------------+---------------------------+
| William  | South   | south.william@uky.edu   | Abby Tanner   | twitter.com/south.william |
| Terry    | Smith   | smith.terry@uky.edu     | Nicole Taylor | twitter.com/smith.terry   |
| Timothy  | Clemens | clemens.timothy@uky.edu | NULL          | NULL                      |
| Dan      | North   | north.dan@uky.edu       | NULL          | NULL                      |
| Courtney | Cox     | NULL                    | NULL          | NULL                      |
+----------+---------+-------------------------+---------------+---------------------------+

ЧЕЛОВЕК

+-------+---------+----------+-------------------------+---------+----------+
| idnum | lname   | fname    | rname                   | private | linkblue |
+-------+---------+----------+-------------------------+---------+----------+
| 22222 | Clemens | Timothy  | clemens.timothy@uky.edu |       0 | tgcl258  |
| 40256 | South   | William  | south.william@uky.edu   |       1 | weso123  |
| 55555 | North   | Dan      | north.dan@uky.edu       |       0 | ddno453  |
| 56732 | Cox     | Courtney | NULL                    |       1 | cco546   |
| 68123 | Smith   | Terry    | smith.terry@uky.edu     |       1 | tlsm321  |
+-------+---------+----------+-------------------------+---------+----------+

ЦИФРОВОЙ

+-------+----------+------------------------------+
| idnum | smtype   | smaddr                       |
+-------+----------+------------------------------+
| 22222 | facebook | facebook.com/clemons.timothy |
| 40256 | facebook | facebook.com/south.william   |
| 68123 | facebook | facebook.com/smith.terry     |
| 22222 | twitter  | twitter.com/clemons.timothy  |
| 40256 | twitter  | twitter.com/south.william    |
| 56732 | twitter  | twitter.com/cox              |
| 68123 | twitter  | twitter.com/smith.terry      |
+-------+----------+------------------------------+

ADVISOR

+---------+---------+---------------+---------------+-------+-------+
| student | advisor | student_name  | advisor_name  | sdate | edate |
+---------+---------+---------------+---------------+-------+-------+
|   40256 |   40256 | William South | Abby Tanner   | NULL  | NULL  |
|   68123 |   68123 | Terry Smith   | Nicole Taylor | NULL  | NULL  |
+---------+---------+---------------+---------------+-------+-------+

Ожидаемый результат

+----------+---------+-------------------------+---------------+---------------------------+
| fname    | lname   | rname                   | advisor_name  | smaddr                    |
+----------+---------+-------------------------+---------------+---------------------------+
| William  | South   | south.william@uky.edu   | Abby Tanner   | twitter.com/south.william |
| Terry    | Smith   | smith.terry@uky.edu     | Nicole Taylor | twitter.com/smith.terry   |
| Timothy  | Clemens | clemens.timothy@uky.edu | NULL          | twitter.com/clemons.timothy                      |
| Dan      | North   | north.dan@uky.edu       | NULL          | NULL                      |
| Courtney | Cox     | NULL                    | NULL          | twitter.com/cox                      |
+----------+---------+-------------------------+---------------+---------------------------+

1 Ответ

1 голос
/ 23 февраля 2020

Не понимаю, зачем вам здесь union. Два left join с должны выполнить работу:

select
    p.fname,
    p.lname,
    p.rname,
    a.advisor_name,
    d.smaddr
from person p
left join advisor a on a.student = p.idnum
left join digital d on d.idnum = p.idnum and d.smtype = 'twitter'

Демонстрация на DB Fiddle :

fname    | lname   | rname                   | advisor_name  | smaddr                     
:------- | :------ | :---------------------- | :------------ | :--------------------------
Timothy  | Clemens | clemens.timothy@uky.edu | <em>null</em>          | twitter.com/clemons.timothy
William  | South   | south.william@uky.edu   | Abby Tanner   | twitter.com/south.william  
Dan      | North   | north.dan@uky.edu       | <em>null</em>          | <em>null</em>                       
Courtney | Cox     | <em>null</em>                    | <em>null</em>          | twitter.com/cox            
Terry    | Smith   | smith.terry@uky.edu     | Nicole Taylor | twitter.com/smith.terry    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...