只从一个表中选择不同的(名称),在另一个表中使用该ID?

时间:2012-10-18 05:31:52

标签: mysql

我有一个名为L1的表格,其中有3,000条记录,其中有一个名为town_id的字段。

town_id中的

L1是名为towns的第二个表中包含数百个城镇名称的数据的整数ID - 字段名称为name

我需要从城镇表中获取所有具有L1记录的不同城镇名称,以便我只选择实际使用的城镇列表而不是列出所有城镇名称。

任何人都可以告诉我如何构建该查询,因为它正在推动我的问题:)

3 个答案:

答案 0 :(得分:2)

要将一个表连接到另一个表,最快的方法通常是连接。如果您正在编写查询,那么阅读并理解联接实际如何工作是一个好主意,因为它是关系数据库的核心。加入这两个表后,您可以执行GROUP BY将一堆共享一个共同字段值(如城镇名称)的记录折叠在一起。所以你可以这样做:

select towns.name from towns inner join L1 on L1.town_id = towns.id group by towns.name

但是为了获得不同的值,人们通常选择使用'distinct'运算符:

select distinct towns.name from towns inner join L1 on L1.town_id = towns.id

答案 1 :(得分:1)

有几种方法可以编写它。最简单的可能是:

SELECT Name
  FROM Towns
 WHERE ID IN (SELECT Town_ID FROM L1)

另一个是:

SELECT DISTINCT T.Name
  FROM Towns AS T
  JOIN L1 ON T.ID = L1.Town_ID;

有趣地发明其他方式......

答案 2 :(得分:1)

也许这会对您有所帮助:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html - 非常确定您需要INNER JOIN