Php 交集表的Join语句
我想将用户连接到一辆或多辆车。这些表如下所示: 表aPhp 交集表的Join语句,php,mysql,sql,join,intersection,Php,Mysql,Sql,Join,Intersection,我想将用户连接到一辆或多辆车。这些表如下所示: 表a id name 1 tom 2 max 表b id car 1 car1 2 car2 3 car3 表2 id id_a id_b 1 1 1 2 1 2 3 2 1 哪个是正确的select语句,因此结果如下: 汤姆有一辆车和二辆车 马克斯有一辆小汽车 我无法让它与内部联接一起
id name
1 tom
2 max
表b
id car
1 car1
2 car2
3 car3
表2
id id_a id_b
1 1 1
2 1 2
3 2 1
哪个是正确的select语句,因此结果如下:
- 汤姆有一辆车和二辆车
- 马克斯有一辆小汽车
我无法让它与
内部联接一起工作。。正确的说法是什么?我认为您需要加入和聚合:
select a.name, group_concat(car) as cars
from ab join
a
on a.id = ab.id_a join
b
on b.id = ab.id_b
group by a.id, a.name;
你需要两个人加入
select a.name, b.car
from table_ab ab
inner join table_a a ON a.id = ab.id_a
inner join table_b b ON b.id = ab.id_b
PS:您也可以在不使用任何连接的情况下执行此操作,在某些情况下,它更快、更干净
SELECT `name`,`car` FROM table_a a,table_b b, table_ab ab
WHERE a.id = ab.id_a AND ab.id_b = b.id
在本例中,descripe显示了相同的结果,因此这两个选项都适用于您。您必须加入表,按名称分组,并使用group\u concat()
与concat()结合使用:
请参阅。
结果:
为什么要多次发布同一个问题?tabletable\u ab
不需要id,它的主键可以是(id\u a,id\u b)
@danblack谢谢你的提示!;)谢谢你的努力!但是你接受了一个没有提供你描述的结果的答案。谢谢你的努力!谢谢你的努力@xnryxzaqa。其他任何答案都比您选择的答案好。我注意到这是第一次。在from
子句中,如何在中用逗号对答案进行投票。@GordonLinoff谢谢你的评论。带逗号的声明是我主要回答的补充。请记住,对于一些人,特别是学生,最好向他们展示mysql中的可能和可用性。此外,可能有些人正在使用精简版的mysql(wo知道,可能是在嵌入式应用程序中)。知识就是力量:)祝你好运day@OliverMGrech . . . 逗号永远不会更快。在大多数了解SQL的人看来,它并不更干净。我并没有说它在所有情况下都更快更干净,请再次阅读我的答案,我清楚地说,Descripte在OPs场景中显示了相同的结果
SELECT `name`,`car` FROM table_a a,table_b b, table_ab ab
WHERE a.id = ab.id_a AND ab.id_b = b.id
select concat(a.name, ' has ', group_concat(car separator ' and ')) col
from table_a a
inner join table_ab ab on ab.id_a = a.id
inner join table_b b on ab.id_b = b.id
group by a.id, a.name
| col |
| --------------------- |
| tom has car1 and car2 |
| max has car1 |