mysql 查询产生的结果比应有的多

标签 mysql sql

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 的联接字段。

最佳答案

怎么样:

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 函数来确定要显示哪些行,然后使用第二个子查询来查找最后一个日期。

关于mysql 查询产生的结果比应有的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474186/

相关文章:

mySQL 左连接

mysql - 选择生日在本周(周一 - 周日)的所有用户

mysql触发器,OLD和NEW之间的文本

php - 在 php - mysql 中嵌套 "group by"和 "for (each)"语句

sql - 聚合函数上的 Postgres "group by"

sql - TSQL 随机选择与选择标准

mysql - 检测数据集中的变化

mysql - 如何打印最大编号的商店名称特定月份和年份的销售额?

Java:结果集更新不更新数据库

mysql - 如何在mysql存储过程中声明变量?