我正在编写一个脚本来检测数据库中任何重复的客人,以便可以合并它们。
我尝试选择预订表中预订次数最多的客人 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/