Объединять только для определенных строк, где значение соответствует переменной - PullRequest
1 голос
/ 03 октября 2011

У меня есть несколько таблиц MySQL, содержащих различное количество столбцов.После объединения трех таблиц у меня есть результирующая таблица, которая имеет следующую структуру:

+------------+------------+-----------+-------+------+
| student_id | first_name | last_name | class | rank |
+------------+------------+-----------+-------+------+
| 1          | John       | Doe       | 2012  | 1    |
+------------+------------+-----------+-------+------+
| 2          | Suzy       | Public    | 2013  | 12   |
+------------+------------+-----------+-------+------+
| 3          | Mike       | Smith     | 2014  | 50   |
+------------+------------+-----------+-------+------+

У меня также есть две дополнительные таблицы, которые не участвуют в начальном объединении:

проценты

+-------------+------------+-----------------------+----------------+
| interest_id | student_id | employer_interest     | interest_level |
+-------------+------------+-----------------------+----------------+
| 1           | 1          | Wayne Enterprises     | High           |
+-------------+------------+-----------------------+----------------+
| 2           | 1          | Gotham National Bank  | Medium         |
+-------------+------------+-----------------------+----------------+
| 3           | 2          | Wayne Enterprises     | Low            |
+-------------+------------+-----------------------+----------------+
| 4           | 3          | Gotham National Bank  | High           |
+-------------+------------+-----------------------+----------------+

предложения

+----------+------------+-----------------------+
| offer_id | student_id | employer_offer        |
+----------+------------+-----------------------+
| 1        | 1          | Wayne Enterprises     |
+----------+------------+-----------------------+
| 2        | 1          | Gotham National Bank  |
+----------+------------+-----------------------+
| 3        | 2          | Wayne Enterprises     |
+----------+------------+-----------------------+

Таблица interest и offers не обязательно будет содержать запись для каждого student_id но в то же время содержат несколько записей, которые ссылаются на одну student_id.

Для каждой из последних двух таблиц я хотел бы:

  1. Выбрать все строки, гдезначение employer_interest или employer_offer равно $var (переменная, которую я установил в PHP)
  2. Присоединить эти строки к исходной таблице

Например,если для $var установлено значение Wayne Enterprises, я бы хотел, чтобы итоговая таблица была такой:

+------------+------------+-----------+-------+------+-------------------+----------------+-------------------+
| student_id | first_name | last_name | class | rank | employer_interest | interest_level | employer_offer    |
+------------+------------+-----------+-------+------+-------------------+----------------+-------------------+
| 1          | John       | Doe       | 2012  | 1    | Wayne Enterprises | High           | Wayne Enterprises |
+------------+------------+-----------+-------+------+-------------------+----------------+-------------------+
| 2          | Suzy       | Public    | 2013  | 12   | Wayne Enterprises | Low            | Wayne Enterprises |
+------------+------------+-----------+-------+------+-------------------+----------------+-------------------+
| 3          | Mike       | Smith     | 2014  | 50   | NULL              | NULL           | NULL              |
+------------+------------+-----------+-------+------+-------------------+----------------+-------------------+

Возможно ли то, что я пытаюсь сделать, используя только запрос MySQL?Если да, то как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

звучит так, как будто вам просто нужно ЛЕВОЕ СОЕДИНЕНИЕ к другим таблицам, так как кажется, что вы хотите видеть всех учеников из первого набора независимо от какого-либо предложения работы / интереса.

Если это так ... убедитесь, что в таблицах "Проценты" и "Предложения" есть индекс, где идентификатор учащегося является либо индексом одного элемента, либо первым в индексе составного индекса.

select STRAIGHT_JOIN
      ORS.Student_ID,
      ORS.First_Name,
      ORS.Last_Name,
      ORS.Class,
      ORS.Rank,
      JI.Employer_Interest,
      JI.Interest,
      OFR.Employer_Offer
   from 
      OriginalResultSet ORS

         LEFT JOIN Interest JI
            ON ORS.Student_ID = JI.Student_ID
           AND JI.Employer_Interest = YourPHPVariable

            LEFT JOIN Offers OFR
               on JI.Student_ID = OFR.Student_ID
              AND JI.Employer_Interest = OFR.Employer_Offer

Чтобы исключить "NULL" из-за интересов, интересов и предложений работодателя, вы можете заключить их в вызов Coalesce (), например (для всех трех столбцов в левом соединении)

COALESCE( JI.Employer_Interest, " " ) Employer_Interest
1 голос
/ 03 октября 2011

Ваш запрос должен выглядеть примерно так:

select 
    s.student_id, s.first_name, s.last_name, s.class, s.rank, 
    i.employer_interest, i.interest_level, 
    o.employer_offer 
from students s
left join interest i 
    on i.student_id = s.student_id 
    and i.employer_interest = 'Wayne Enterprises'
left join offers o 
    on o.student_id = s.student_id 
    and o.employer_offer = 'Wayne Enterprises'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...