mySql一对多关系表结构

时间:2015-02-23 18:43:07

标签: mysql join

请问您对我关于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表中有数百万个位置。如何通过这种类型的表结构实现最大性能?或者我需要更改表格结构吗?

请指导我。

1 个答案:

答案 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标记或仅有一个标记的地方,计数将返回01,并被HAVING子句转储。