Mysql 使用表别名的SQL查询

Mysql 使用表别名的SQL查询,mysql,sql,database,Mysql,Sql,Database,我在数据库中创建了一个名为city的表。此表有两列,分别称为“名称”和“国家”。我创建了一个查询,返回不同国家/地区的城市组合,如下所示: SELECT c1.name, c1.country, c2.name, c2.country FROM city c1, city c2 WHERE c1.country != c2.country 此查询有效,但城市对会重复,即我通过以下方式获得结果: Berlin Germany London England London Englan

我在数据库中创建了一个名为city的表。此表有两列,分别称为“名称”和“国家”。我创建了一个查询,返回不同国家/地区的城市组合,如下所示:

SELECT c1.name, c1.country, c2.name, c2.country 
FROM city c1, city c2
WHERE c1.country != c2.country 
此查询有效,但城市对会重复,即我通过以下方式获得结果:

    Berlin Germany London England 
London England Berlin Germany
这意味着在我的结果集中,柏林/汉堡这对城市是重复的。有办法解决这个问题吗

选择c1.name、c1.country、c2.name、c2.country
SELECT c1.name, c1.country, c2.name, c2.country 
FROM city c1, city c2
WHERE c1.country < c2.country
来自城市c1,城市c2 其中c1.国家
您可以使用
左连接来执行此操作
请参见尝试此操作:

SELECT c1.name, c1.country, c2.name, c2.country 
FROM city c1
     LEFT JOIN city c2
         ON c1.country = c2.country 
            AND c1.name = c2.name
WHERE c1.country IS NULL OR 
      c2.country IS NULL;

一个好的数据库在一个表中永远不会有两个或多个相同的记录。因此,我的建议是制作两张表:

cities: ID, country_ID, Name
countries: ID, Name
选择的范围应为:

SELECT c.Name, co.Name
FROM cities c
INNER JOIN countries co
    ON co.ID=c.country_ID 

为什么查询中有城市c3?问题已调整。谢谢。那不应该是c1.namec1.country=c2.country和c1.name。他还抱怨城市出现了两次。一次在c1表中,一次在c2表中。通过强制c1中的名称小于c2中的名称,可以防止重复。。。。我知道你现在也意识到了。你为什么不把它加到你的答案里呢?谢谢大家。我原来的问题不正确。我希望这些城市来自不同的国家,所以Barmars的回答是正确的。不过,我从所有答案中学到了很多,所以谢谢你的帮助。你怎么会认为他的表格里有重复的记录?只有当他使用
进行自连接时,才会出现复制=条件,因为您将获得一对行,其中
A=B
B=A
。这就是为什么将条件更改为
,我没有说明所用查询返回的内容。我说,在他的城市表中,他存储美国纽约;美国洛杉矶,其中USA是此行中的重复条目,也可能是其他行中的重复条目,这对于强数据库来说是不正确的条目。因此,他应该只存储与国家id有关的唯一城市名称。所以,你实际上并没有回答他的问题,只是对他的数据库设计提出了一般性建议。这属于评论,而不是答案。