MySQL DISTINCT 返回不太明显的结果

MySQL DISTINCT returning not so distinct results

美好的一天,

我对 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这样的预订添加了很多评论。 比方说 10。然后当 运行 上述查询时,我看到 10 个结果而不是一个。

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

您可以尝试以下 - 使用 case when 表达式

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

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

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 子句中以获得上述查询至 运行.