MySQL запрос дает больше результатов, чем следует - PullRequest
0 голосов
/ 19 марта 2010
SELECT S.CLIENT,S.IP_DOMAIN as IP, IFNULL(K.DATE, DATE '0000-00-00') AS RecentDate
      FROM PLD_SERVERS AS S JOIN PLD_SEARCHES AS K ON S.ID = K.SERVER_ID

Этот запрос даст столько же результатов, сколько записей в PLD_SEARCHES. Например:

У меня есть 3 записи в PLD_SERVERS и 18 записей в PLD_SEARCHES. Результат этого запроса будет 18, но мне нужно, чтобы он был 3 (как число записей PLD_SERVERS) с недавней датой в качестве поля соединения из PLD_SEARCHES.

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Как насчет чего-то вроде:

SELECT S.CLIENT,S.IP_DOMAIN as IP
    , IFNULL(
        (
        Select Max(K2.DATE)
        From PLD_SEARCHES AS K1 
        Where S.ID = K1.SERVER_ID
        ), DATE, '0000-00-00') AS RecentDate
FROM PLD_SERVERS AS S 
Where Exists(   
            Select 1
            From PLD_SEARCHES AS K1 
            Where S.ID = K1.SERVER_ID
            )

Здесь я использую функцию Exists, чтобы определить, какие строки показывать, а затем использую второй подзапрос, чтобы найти последнюю дату.

0 голосов
/ 19 марта 2010

Попробуйте использовать левое соединение:

   SELECT  S.CLIENT,S.IP_DOMAIN as IP, IFNULL(K.DATE, DATE '0000-00-00') AS RecentDate
     FROM  PLD_SERVERS AS S 
LEFT JOIN  PLD_SEARCHES AS K ON S.ID = K.SERVER

Возможно, проблема связана с неправильным типом JOIN для этой ситуации. Проверьте различные типы соединения:

  1. http://en.wikipedia.org/wiki/Join_%28SQL%29
  2. http://www.wellho.net/mouth/158_MySQL-LEFT-JOIN-and-RIGHT-JOIN-INNER-JOIN-and-OUTER-JOIN.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...