Поиск несопоставленных записей в mysql с 3 таблицами - PullRequest
0 голосов
/ 14 апреля 2020

Я создаю веб-сайт, где 1. студенты регистрируются самостоятельно, 2. оплачивают мероприятие и 3. затем выбирают компании. У меня есть 3 таблицы с именами: 1) студент 2) pay_confirm 3) company_name
Каждая таблица использует s_id в качестве внешнего ключа.

  • Данные вставляются в таблицу студентов, когда они сами регистрируются.
  • Данные вставляются в pay_confirm, когда студент оплачивает мероприятие.
  • Данные вставляются в company_name, когда студент выбирает компании.

Структура таблицы ученика состоит из s_id ,fname, lname, phone, email.
Структура pay_confirm состоит из s_id , status , timestamp.
Название компании состоит из s_id , c1 , c2 , c3 ,c4

Я хочу знать имя и телефон студентов, которые оплатили мероприятие, но еще не выбрали компании.

SELECT fname, lname, phone
FROM student
WHERE s_id IN (SELECT DISTINCT s_id FROM student, pay_confirm
               MINUS
               SELECT DISTINCT s_id from company_name);

student таблица:

+----------------------------------------+
|  s_id   fname lname phone      email   |
+----------------------------------------+
| IWS101 sam molly XXXXXX sam@gmail.com  |
| IWS102 clay jen  XXXXXX clay@gmail.com |
| IWS103 rose glen XXXXXX rose@gmail.com |
+----------------------------------------+

pay_confirm:

+-----------------------+
| s_id  status pay-time |
+-----------------------+
| IWS101 1     XX-XX-XX |
| IWS102 1     XX-XX-XX |
+-----------------------+

company_name:

+------------------------+
| s_id    c1  c2  c3  c4 |
+------------------------+
| IWS101  A   B   C    D |
+------------------------+

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

+-------------------------------------+
| fname lname  email           phone  |
+-------------------------------------+
| clay   jen   clay@gmail.com XXXXXXX |
+-------------------------------------+

1 Ответ

2 голосов
/ 14 апреля 2020

Согласно вашему описанию, я думаю, что решение ниже работает для вас. вот это sqlfiddle

SELECT 
    fname,
    lname,
    phone,
    email
FROM student s

JOIN pay_confirm pc
on s.s_id = pc.s_id

WHERE status = 1
and NOT EXISTS (select 
                  s_id 
                from company_name c
                where c.s_id = pc.s_id
               )

Вывод:

*------------------------------------------*
| fname lname      phone      email        |
*------------------------------------------*
| clay   jen    4534566677  clay@gmail.com |
*------------------------------------------*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...