Php 如何在内部联接不匹配的情况下返回某些内容
我有两张桌子 库索斯Php 如何在内部联接不匹配的情况下返回某些内容,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有两张桌子 库索斯 +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| curso | varchar(255) | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
三年期
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| data_trienio | varchar(255) | NO | | NULL | |
| curso_id | int(11) | NO | | NULL | |
| oe_id | int(11) | NO | | NULL | |
+--------------+------------------+------+-----+---------+----------------+
这些表是通过关系连接的,就像通过curso_id看到的那样,我想做一个查询,在这里我检索curso记录以及与每个记录相关的trienio记录的数量
所以我在拉威尔做了这个查询
$curso = Curso::select([
'cursos.curso',
\DB::raw('count(trienios.curso_id) as count')
])->join('trienios', 'trienios.curso_id', '=', 'cursos.id')
->groupBy('trienios.curso_id');
也就是说
select `cursos`.`curso`,
count(trienios.curso_id) as count
from `cursos`
inner join `trienios`
on `trienios`.`curso_id` = `cursos`.`id`
group by `trienios`.`curso_id`
它会告诉我有多少个与之相关的curso和trienios。然而,它只给那些有一些与他们相关的三年期的人。其他那些没有与之相关的三年期的人不会被查询,我想查询他们。那么,如何解决这个问题呢?使用leftJoin,选择cursos.id,并按cursos.id分组:
这是我要运行的查询:
SELECT c.id,
COUNT(t.curso_id) AS count
FROM cursos c
LEFT JOIN trienios t
ON t.curso_id = c.id
GROUP BY c.id
左连接应防止删除游标中的记录,即使这些记录在trienios中没有匹配的副本。至于您看到的错误,您选择的是cursos.curso,它不是聚合,也不出现在GROUPBY子句中。当MySQL只在\u full\u组中时,这是不允许的,因此我将select子句更改为cursos.id.错误。SQLSTATE[42000]:语法错误或访问冲突:SELECT list的1055表达式1不在GROUP BY子句中,并且包含功能上不依赖GROUP BY子句中的列的非聚合列“repositorio.cursos.curso”;这与sql_mode=only_full_group_by sql不兼容:从select cursos.curso中选择count*作为聚合,从cursos left join trienios中选择count trienios.curso\u id=cursos.id group by trienios.curso\u id count\u row_表格中选择count作为count这是怎么可能的?那么您最初的查询如何运行呢?我最终只禁用了\u full\u group\u by并应用了您的解决方案我只是更改了查询名称行而不是id行,并且工作正常。谢谢你的帮助
SELECT c.id,
COUNT(t.curso_id) AS count
FROM cursos c
LEFT JOIN trienios t
ON t.curso_id = c.id
GROUP BY c.id