【问题标题】:MySQL DISTINCT returning not so distinct resultsMySQL DISTINCT 返回不那么明显的结果
【发布时间】:2020-01-03 13:59:30
【问题描述】:

早安,

我对 MySQL Distinct 有一个小问题。 在我的系统中尝试以下查询:

SELECT DISTINCT `booking_id`, `booking_ticket`, `booking_price`, `bookingcomment_id`, `bookingcomment_message` FROM `mysystem_booking`
LEFT JOIN `mysystem_bookingcomment` ON `mysystem_booking`.`booking_id` = `mysystem_bookingcomment`.`bookingcomment_link`
WHERE `booking_id` = 29791

关键是像 29791 这样的预订添加了许多 cmets。 假设是 10。然后在运行上述查询时,我看到 10 个结果而不是 1 个。

这不是 DISTINCT 设想的工作方式。 我只是想知道是否有任何cmets。如果评论 ID 不为 0,则有评论。当然,我可以将 COUNT(blabla) 添加为 comment_number,但这是一个完全不同的故事。对我来说,现在我只想拥有正确的语法。

【问题讨论】:

  • SELECT DISTINCT ... 返回不同的行,查看您的查询,每行可能每行至少有一位不同的数据(可能是评论 ID 和消息),因此显示出来。
  • 如果有10个cmets,你想看哪一个?

标签: mysql distinct distinct-values


【解决方案1】:

您可以在下面尝试 - 在表达式中使用大小写

SELECT DISTINCT `booking_id`, `booking_ticket`, `booking_price`, `bookingcomment_id`, 
case when `bookingcomment_message`<>'0' then 'No' else 'Yes' end as comments
FROM `mysystem_booking`
LEFT JOIN `mysystem_bookingcomment` ON `mysystem_booking`.`booking_id` = `mysystem_bookingcomment`.`bookingcomment_link`
WHERE `booking_id` = 29791

【讨论】:

    【解决方案2】:

    您可以尝试在此处进行汇总,以查找哪些预订至少有一条评论与之关联:

    SELECT
        b.booking_id,
        b.booking_ticket,
        b.booking_price
    FROM mysystem_booking b
    LEFT JOIN mysystem_bookingcomment bc
        ON b.booking_id = bc.bookingcomment_link
    WHERE
        b.booking_id = 29791
    GROUP BY
        b.booking_id
    HAVING
        COUNT(bc.bookingcomment_link) > 0;
    

    请注意,根据您的 MySQL 服务器模式,您可能还必须将 booking_ticketbooking_price 列添加到 GROUP BY 子句才能运行上述查询。

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2019-09-01
      • 2017-03-24
      相关资源
      最近更新 更多