2014-01-05 4 views
-1

У меня есть три таблицыПрисоединяйтесь три таблицы в MySQL

Таблица 1

student_id | id | status 
-------------------------------- 

10 | 100 | 1 
11 | 100 | 1 
12 | 100 | 1 
13 | 100 | 1 
10 | 200 | 1 
11 | 200 | 1 
12 | 200 | 1 
13 | 200 | 1 

Таблица 2

date | status 
------------------------  
2013-12-28 | cd 
2013-12-29 | wd 
2013-12-30 | cd 

Таблица 3

date | id 
------------------------  
2013-12-28 | 100 
2013-12-30 | 200 

мне нужно нулевые значения для всех студенты от 2013-12-29

sid | дата | статус | дата | статус ------------------------------------------------ -------

10 | 2013-12-28 | 1  | 2013-12-28 | cd 
11 | 2013-12-28 | 1  | 2013-12-28 | cd 
12 | 2013-12-28 | 1  | 2013-12-28 | cd 
13 | 2013-12-28 | 1  | 2013-12-28 | cd 
10 | null  | null | 2013-12-29 | wd 
11 | null  | null | 2013-12-29 | wd 
12 | null  | null | 2013-12-29 | wd 
13 | null  | null | 2013-12-29 | wd 
10 | 2013-12-30 | 1  | 2013-12-30 | cd 
11 | 2013-12-30 | 1  | 2013-12-30 | cd 
12 | 2013-12-30 | 1  | 2013-12-30 | cd 
13 | 2013-12-30 | 1  | 2013-12-30 | cd 

Я попытался с Join two tables in mysql?

И я использовал следующий запрос

SELECT distinct x.student_id, table1.status, x.date bdate, table2.status bstatus 
FROM 
    (SELECT DISTINCT table1.student_id, table2.date 
    FROM table1 
      CROSS JOIN table2) x 
      LEFT JOIN table1 ON x.sid=table1.sid 
      left join table3 on table1.id=table3.id and x.date=table3.date 
      LEFT JOIN table2 ON x.date=table2.date ORDER BY bdate, student_id 

но я did'nt получить нулевые значения для состояния 3-я колонка.

+0

Так что ваш вопрос? – zerkms

+0

я не получаю нулевые значения для моего запроса SELECT DISTINCT x.student_id, table1.status, x.date bdate, table2.status bstatus ОТ (SELECT DISTINCT table1.student_id, table2.date ОТ table1 CROSS JOIN таблица2) х LEFT JOIN table1 ON x.sid = table1.sid влево присоединиться на Таблицу 3 table1.id = table3.id и x.date = table3.date LEFT JOIN table2 ON x.date = table2.date ORDER BY bdate, student_id – Madusudhanan

+0

Как добавить, что в комментарии кто-нибудь поможет? Добавьте его к своему вопросу. – Daedalus

ответ

1
SELECT DISTINCT student_id,t3.date,IF(t3.date IS NULL, NULL,t1.status) as status,t2.date as date2,t2.status as status2 
FROM table2 t2 
LEFT JOIN table3 t3 USING(date) 
JOIN table1 t1 ON (t1.id = t3.id OR t3.id IS NULL) 
ORDER BY date2,student_id 

sqlFiddle

+0

Его работа. Пожалуйста, уточните, как работает этот запрос – Madusudhanan

+0

ну, прежде всего, вы хотите сохранить все даты в таблице2, поэтому вы оставите его с помощью таблицы3, чтобы получить 3 строки, один с нулевыми значениями для t3. Затем вы присоединяете это к таблице1, где совпадение id или t3.id равно null, и поэтому вы получите несколько совпадающих идентификаторов и несколько нулевых строк, но затем Distinct избавится от второго набора нулевых строк. Вы можете попробовать это без четких и увидеть. –

Смежные вопросы