Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用join时如何返回不同的行?_Mysql_Join_Distinct - Fatal编程技术网

Mysql 使用join时如何返回不同的行?

Mysql 使用join时如何返回不同的行?,mysql,join,distinct,Mysql,Join,Distinct,我有以下返回1738行的查询: select a.street, b.id from TableA a left join TableB b on a.city = b.city order by a.street 执行以下查询,返回1073行: 从表A中选择不同的街道 如何在第一次查询中返回不同的行? 我尝试使用选择不同的a.street,b.id,但返回1090行 我需要另一个联接吗?您应该仅将GROUP BY与聚合函数一起使用。MySQL不会将其标记为错误,但这样做会丢失一些数据 se

我有以下返回1738行的查询:

select a.street, b.id 
from TableA a
left join TableB b on a.city = b.city
order by a.street
执行以下查询,返回1073行:
从表A中选择不同的街道

如何在第一次查询中返回不同的行?
我尝试使用
选择不同的a.street,b.id
,但返回1090行


我需要另一个联接吗?

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

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
至于您的查询:如果您有1073条不同的街道,并且在执行“distinct 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

谢谢我总是忘记分组方式。使用
groupbya.street,b.id
返回1090行,但如果使用
groupbya.street
(删除b.id),则返回1073行。因此,我猜这应该是:)这意味着在数据集中,同一条街道有多个id,您是否希望在输出中使用这些id取决于您尝试执行的操作。多个id是可以的,因为一个城市可能有多条街道:)