2014-12-17 4 views
2

привет, у меня есть вопрос о левом соединении. У меня есть две таблицы «Клиент», «Встреча», а общая колонка - «mkod».Sql Left Join Error

таблица Клиенты имеет «mkod» и «CUSTOMERNAME» colums стол Встреча «mkod», «Подробности» и «meetingdate»

я хочу, чтобы просмотреть все записи от клиентов и столбец «данные» на mkod а последняя дата собрания - за столом заседаний.

но я не вижу всех записей на собрании.

Мой код так,

select c.mkod,m.details 
from customer c 
left join meeting m on c.mkod=m.mkod 
where m.details= 
    (select top 1 details 
    from meeting 
    where c.mkod=meeting.mkod 
    order by meetingdate desc) 
order by c.mkod 

спасибо

ответ

1

Попробуйте это:

MySQL

SELECT c.mkod, IFNULL(m.details, '') AS details 
FROM customer c 
LEFT JOIN (SELECT m.mkod, m.details 
      FROM meeting m 
      INNER JOIN (SELECT m.mkod, MAX(m.meetingdate) meetingdate 
         FROM meeting m 
         GROUP BY m.mkod 
        ) a ON m.mkod = a.mkod AND m.meetingdate = a.meetingdate 
     ) m ON c.mkod=m.mkod; 

SQL Server

SELECT c.mkod, ISNULL(m.details, '') AS details 
FROM customer c 
LEFT JOIN (SELECT m.mkod, m.details 
      FROM meeting m 
      INNER JOIN (SELECT m.mkod, MAX(m.meetingdate) meetingdate 
         FROM meeting m 
         GROUP BY m.mkod 
        ) a ON m.mkod = a.mkod AND m.meetingdate = a.meetingdate 
     ) m ON c.mkod=m.mkod; 
+0

спасибо, что это работает, но еще одна вещь, в таблице результатов, если нет данных в столбце подробности, она набирает NULL, может ли она быть пустой, а не NULL. – newusereser

+0

Я пробовал этот код, но никаких действий, выберите c.mkod, case m.details, когда NULL тогда '', когда m.details, после чего m.details закончится с ........ Большое вам спасибо – newusereser

+1

Спасибо, проблема решена – newusereser

0

Это ваш запрос:

select c.mkod, m.details 
from customer c left join 
    meeting m 
    on c.mkod=m.mkod 
where m.details=(select top 1 details from meeting where c.mkod=meeting.mkod order by meetingdate desc) 
order by c.mkod; 

Предложение where имеет условие на второй таблице в left outer join. Это означает, что условие не вернется к истине, когда значения столбца равны NULL - поворот left outer join в inner join. Вы можете исправить это, перемещая условие к пункту on:

select c.mkod, m.details 
from customer c left join 
    meeting m 
    on c.mkod = m.mkod and 
     m.details = (select top 1 m2.details from meeting m2 where c.mkod = m2.mkod order by m2.meetingdate desc) 
order by c.mkod; 

Кроме того, если вы хотите, самое последнее, не должно быть условие на meetingdate, а не details?

select c.mkod, m.details 
from customer c left join 
    meeting m 
    on c.mkod = m.mkod and 
     m.meetingdate = (select max(m2.meetingdate) from meeting m2 where c.mkod = m2.mkod) 
order by c.mkod; 
+0

Спасибо за этот ответ. Моя проблема решена. – newusereser