MYSQL 检索一个表中在另一个表中出现最多的行

标签 mysql sql

我正在编写一个脚本来检测数据库中任何重复的客人,以便可以合并它们。

我尝试选择预订表中预订次数最多的客人 ID,因为这就是我想要合并的客人。因此,如果有任何重复项,它将返回一行,并且 ID 将是预订次数最多的客人的 ID。

不确定如何做到这一点?

select 
    count(*) as duplicates,
    guests.id as id,
    guest_name(null, null, guests.id) as guest_name
from
    guests
        left join
    bookings_guests_link
        left join
    bookings ON bookings.id = bookings_guests_link.booking_id ON guests.id = bookings_guests_link.guest_id
        and bookings_guests_link.primary_client = 1
group by title , firstname , lastname , street , city , postcode , state_id
having duplicates > 1
order by count(bookings.id) desc , duplicates desc

任何帮助表示赞赏!谢谢

最佳答案

这应该为您提供每位客人和预订数量。

您可以用它创建一个临时表

SELECT g.id, g.firstname, g.lastname, street, city, postcode, state_id,
       COUNT(b.id) AS NoOfBookings
FROM guests g
LEFT JOIN bookings_guests_link bgl
  ON g.id = bgl.guest_id
LEFT JOIN bookings b
  ON b.id = bgl.booking_id
GROUP BY g.id, g.firstname, g.lastname

这将为您提供重复客人的列表

SELECT title, firstname, lastname, street, city, postcode, state_id
FROM guests
GROUP BY title, firstname, lastname, street, city, postcode, state_id
HAVING COUNT(id) > 1

因此,您只需找到两者之间的匹配项,然后决定实际要如何合并记录。

关于MYSQL 检索一个表中在另一个表中出现最多的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472524/

相关文章:

c# - 从 mysql 数据库中减去一个值,其中我的减数是从文本框的值中减去的

php - ORDER BY 日期排序仅使用天和月mysql

java - 如果sql查询什么也找不到怎么处理?在java中使用结果集

sql - 改进 Oracle 中的连接查询

c# - 如何打印第一页的末尾

MySQL:类似MAX的子查询中选择一行,只是自定义顺序优先级

php - 在 CMS 中插入表单 - <选项> 和页面

C# 数据库搜索(如何创建查询字符串)

mysql - 如何从多个具有公共(public)值的 mysql 行生成数组

sql - PostgreSQL - 如何使简单查询更快