MySQL 3表连接
我有数据可以根据它们的位置获取列表。位置映射到位置映射表中。结构基本上如下所示:MySQL 3表连接,sql,mysql,Sql,Mysql,我有数据可以根据它们的位置获取列表。位置映射到位置映射表中。结构基本上如下所示: listings -id -title etc. locations -id -location_name etc. location_map -listing_id -location_id 当我想根据清单的位置列出清单时,我使用以下SQL语句。基本上,我有位置id,然后我可以找到该位置的列表。我使用DISTINCT,这样就不会得到重复的位置结果 这是可行的,但我想知道这是
listings
-id
-title
etc.
locations
-id
-location_name
etc.
location_map
-listing_id
-location_id
当我想根据清单的位置列出清单时,我使用以下SQL语句。基本上,我有位置id,然后我可以找到该位置的列表。我使用DISTINCT,这样就不会得到重复的位置结果
这是可行的,但我想知道这是否是一个好方法,因为我需要使用DISTINCT。有没有更好、更受欢迎的方式来做这样的事情
SELECT DISTINCT LS.title, LS.id, LS.url, LS.description
FROM listings LS
JOIN location_map MAP ON LS.id = MAP.listing_id
JOIN locations LOC ON LOC.id = MAP.location_id
WHERE LOC.id = 123
ORDER BY LS.title;
你可以试试
SELECT LS.title, LS.id, LS.url, LS.description
FROM listings LS
WHERE
LS.id IN (
SELECT LM.listing_id
FROM location_map LM
WHERE LM.location_id = 123 )
这样就消除了与位置的连接
我不确定问题出在哪里。如果您确定了一个位置,为什么会有重复的位置?为什么会有重复的位置?对于每个列表/位置组合,位置图中是否有多行?此代码有效(我没有重复代码),我只是不确定这是否是最好的方法。他的意思是,如果不使用
DISTINCT
,您会得到什么样的重复代码?从你展示的数据模型来看,你不应该被骗……我明白你的意思了。因此,我可能有不同的问题,有多个相同的列表/位置组合。我应该先检查一下。下面的答案对我也很有帮助。当我得到更多的数据时,我将测试哪个语句最有效。非常感谢。你的陈述有效,而且简单得多。我刚刚读到,一般来说,使用sub-select语句比使用DISTINCT语句更好,但我不知道如何使用。看到你的解决方案,这是非常简单的。