mysql查询产生的结果应该超出预期

时间:2010-03-19 00:05:42

标签: sql mysql mysqli

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中的条目一样多的结果。例如:

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

2 个答案:

答案 0 :(得分: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函数来确定要显示的行,然后使用第二个子查询来查找最后一个日期。

答案 1 :(得分: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