请问您对我关于mysql连接的问题提出建议。
我的表结构:
place table:
place_id place_name city
1 Hotel Golconda Hyderabad
2 Paradise Hotel Hyderabad
3 Hotel Mayuri Hyderabad
place_tags
tag_id tag_name
1 Valet Parking
2 Air Conditioned
3 Buffet
4 Bar
5 Family Dining
places_info Table:
place_id tag_id
1 1
1 2
1 3
2 1
2 5
3 1
3 4
上面是我的所有表格,其中包含地方表中的地名和地址,标签表中餐馆的所有设施以及places_info表中每个地点的设施的映射。
这是我的桌子结构是否正确,以获得有#t;代客泊车和自助餐"的地方。如何为此类结果编写连接查询以获取。
最重要的是,我们在places表和places_info表中有数百万个位置。如何通过这种类型的表结构实现最大性能?或者我需要更改表格结构吗?
请指导我。
答案 0 :(得分:0)
这是"与代客和自助餐的地方的基本结构":
SELECT place_id, COUNT(places_info) AS cnt
FROM place
LEFT JOIN places_info ON place.place_id = places_info.place_ID
AND tag_id IN (1, 3)
^^^^---- two tags: valet(1) + buffet(3)
GROUP BY place.place_id
HAVING cnt = 2
^^^---- must have both tags
对于具有NEITHER标记或仅有一个标记的地方,计数将返回0
或1
,并被HAVING
子句转储。