Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
Php 交集表的Join语句_Php_Mysql_Sql_Join_Intersection - Fatal编程技术网

Php 交集表的Join语句

Php 交集表的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语句,因此结果如下: 汤姆有一辆车和二辆车 马克斯有一辆小汽车 我无法让它与内部联接一起

我想将用户连接到一辆或多辆车。这些表如下所示:

表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语句,因此结果如下:

  • 汤姆有一辆车和二辆车
  • 马克斯有一辆小汽车

我无法让它与
内部联接一起工作。。正确的说法是什么?

我认为您需要加入和聚合:

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()结合使用:

请参阅。
结果:


为什么要多次发布同一个问题?table
table\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          |