2011-11-22 47 views
2

我有以下查询返回1738行:如何在使用连接时返回不同的行?

select a.street, b.id 
from TableA a 
left join TableB b on a.city = b.city 
order by a.street 

执行下面的查询,返回1073行:
select distinct street from TableA

我怎样才能回到我的第一个查询不同的行?
我试过使用select distinct a.street, b.id,但是这返回1090行。

我需要另一个连接吗?

+0

您是否试过外连接? – markus

回答

5
select a.street, b.id 
from TableA a 
left join TableB b on a.city = b.city 
group by a.street, b.id 
order by a.street 
+0

谢谢。我一直忘记'group by'。使用'group by a.street,b.id'会返回1090行,但如果我使用'group by a.street'(移除b.id),它将返回1073行。所以这应该不是那么我想:) – Steven

+0

这意味着在你的数据集中,你有相同的街道与多个ID,无论你想要在你的输出取决于你想要做什么。 –

+0

多个ID是好的,因为一个城市可能有很多街道:) – Steven

0

您应该只对聚合函数使用GROUP BY。 MySQL不会将其标记为错误,但您在这样做时会丢失一些数据。

至于你的查询:如果你有1073个不同的街道,而你在做“不同的a.street,b.id”时得到1090行,这意味着有些街道有多个b.id。你可以得到他们所有的人(并得到1090行),或者只取其中一些。要获得每行1073行和只有一个b.id,请使用:

select a.street, max(b.id) 
from TableA a 
left join TableB b on a.city = b.city 
group by a.street 
order by a.street