MySQL: ВЫБЕРИТЕ с LEFT JOIN - PullRequest
       8

MySQL: ВЫБЕРИТЕ с LEFT JOIN

1 голос
/ 22 июня 2011

как мне объединить две таблицы и сделать второй необязательным?

SELECT t1.title,SUM(t2.seconds) AS seconds 
FROM operation t1 
  LEFT JOIN workhours t2 ON t1.id = t2.pid AND t1.status='0' 
ORDER BY t1.tstamp DESC

Этот запрос показывает только один результат, но есть второй без нашего рабочего времени. Как я могу убедиться, что данные из t1 всегда будут отображаться, даже если в t2 ничего нет?

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

Вам нужно добавить GROUP BY t1.title:

SELECT t1.title,SUM(t2.seconds) AS seconds 
FROM operation t1 LEFT JOIN workhours t2 ON t1.id = t2.pid AND t1.status='0' 
GROUP BY t1.title
ORDER BY t1.tstamp DESC

Как правило, если заголовок не является уникальным, следует группировать по уникальному ключу.

0 голосов
/ 22 июня 2011

Возможно, проблема в параметре "SUM (t2.seconds)" по вашему выбору.

Попробуйте добавить ISNULL (SUM (t2.seconds), 0).

Если это не сработает, вы можете попробовать оператор SQL IF или CASE и проверить столбец в t2 на наличие нулей.

0 голосов
/ 22 июня 2011

Если вам нужно, чтобы результаты первого всегда не соответствовали ни одному из второго, поэтому вы должны использовать Left Outer Join , если в другой таблице нет совпадений со вторым один он всегда будет показывать результат первого независимо, если второй соответствует соединению или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...