2010-03-19 6 views
0
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 

Cette requête produira autant de résultats que d'entrées dans PLD_SEARCHES. Par exemple:La requête mysql génère plus de résultats que nécessaire

J'ai 3 entrées dans PLD_SERVERS et 18 entrées dans PLD_SEARCHES. La sortie de cette requête sera de 18 mais j'en ai besoin de 3 (nombre d'entrées PLD_SERVERS) avec la date récente comme champ de jointure de PLD_SEARCHES.

Répondre

1

Que diriez-vous quelque chose comme:

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 
      ) 

J'utilise ici la fonction Exists pour déterminer les lignes à afficher et puis j'utilise une deuxième sous-requête pour trouver la dernière date.

+0

ne fonctionne pas ... je dois tout sélectionner à partir de PLD_SERVERS et puis rejoindre une colonne avec la date la plus récente à partir de PLD_SEARCHES si le PLD_SERVERS.ID = PLD_SEARCHES.SERVER_ID détient – user253530

+0

a fonctionné merci. J'avais besoin de modifier certains arguments et une virgule :) – user253530

+0

Où était ma virgule à sa place afin que je puisse mettre à jour la réponse? – Thomas

0

Essayez d'utiliser une jointure gauche:

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 

Le problème provient probablement d'une mauvaise REJOIGNEZ type pour cette situation. Vérifiez les différents types de rejoindre:

  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
+0

true c'est une jointure incorrecte mais je n'arrive pas à comprendre comment. – user253530

Questions connexes