2010-03-19 61 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 

该查询将生成与PLD_SEARCHES中的条目一样多的结果。例如:mysql查询产生的结果比应该更多

我在PLD_SERVERS中有3个条目,在PLD_SEARCHES中有18个条目。此查询的输出将是18,但我需要它为3(作为PLD_SERVERS条目的数量)与最近的日期作为来自PLD_SEARCHES的连接字段。

回答

1

如何像:

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

不工作...我需要从PLD_SERVERS中选择所有,然后加入PLD_SEARCHES中最新日期的列,如果PLD_SERVERS.ID = PLD_SEARCHES.SERVER_ID保存 – user253530 2010-03-19 00:22:32

+0

得到它的工作谢谢。我需要修改一些参数和逗号:) – user253530 2010-03-19 00:26:01

+0

我的逗号在哪里不合适,以便我可以更新答案? – Thomas 2010-03-19 00:29:50

0

尝试使用左连接:

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

这是一个不正确的连接,但我不知道如何。 – user253530 2010-03-19 00:23:38