我有一些酒店,每个房间有不同的酒店视图,我的最终用户想要3个房间,例如每个房间有2张床,我必须组合记录,有时某些字段可能会重复,这并不重要,而用户在这种情况下可能有不同的房间类型我举例说明每个房间有2个床位号:我在得到结果时有问题:我在“mysql”中使用self-join,所有的东西都是真的,但有些问题是在这种情况下有相同的行这是我的代码:
SELECT
table1.id,
table2.id,
table3.id,
table1.num_bed,
table2.num_bed,
table3.num_bed
LEFT JOIN
tour_package table2
ON table1.tour_id = table2.tour_id
AND table1.hotel_id = table2.hotel_id
AND table1.start_date = table2.start_date
LEFT JOIN
tour_package table3
ON table2.tour_id = table3.tour_id
AND table2.hotel_id = table3.hotel_id
AND table2.start_date = table3.start_date
WHERE
table1.num_bed = 2
AND table2.num_bed = 2
AND table3.num_bed = 2
结果是:
请注意id,一个是table1.id,两个是table2.id,三个是table3.id
结果是:1-2-11-1-2等
我想防止这种情况,并有一个他们,请帮助我
1条答案
按热度按时间omjgkv6w1#
我假设查询的目标是列出同一个酒店中每个记录最多3个房间,对于同一个旅行和有2张床的日期。
(老实说,我不明白这个查询的意义,因为它会在tour\u package表中列出所有两张床的房间。)
这意味着不仅1-1-2和1-2-1是重复的,而且第二个1是冗余信息。在7号酒店,只有两个房间符合这个标准:1号和2号。
在连接条件中,我要求从每个表返回一个具有不同id的记录。这将强制查询返回记录中唯一ID的列表。
但是,如果酒店中至少有2个房间符合上述条件,则上述查询仍可能返回冗余数据。假设这两个房间的id为1和2,查询将返回1,2,null和2,null,null。为了解决这个问题,我只想写下:
原因:即使您的on查询也会在您的tour\u套餐表中显示所有两张床的房间。