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语句更好,但我不知道如何使用。看到你的解决方案,这是非常简单的。