php - SQL 查询 SQLSTATE[42S21]: 列已存在: 1060 列名重复
问题描述
我正在尝试加入 3 个表,其中 1 个表有另外两个表的主键。代码如下:
起初,我尝试在不使用任何别名的情况下运行查询。然后改了。
public function member_show()
{
$number_of_member =
DB:: table('members')
->distinct('email')
-> count('email');
$data = DB::select("
SELECT m.member_id, m.member_name, m.email, m.password,
cl.club_name, ct.city_name, jobtype.type_name
FROM members as m
LEFT JOIN clubs as cl ON cl.club_id = m.club_id
LEFT JOIN cities as ct ON ct.city_id = m.city_id
LEFT JOIN (SELECT *
FROM jobs as jb
LEFT JOIN j_types as jt
ON jt.type_id = jb.type_id) as jobtype
ON jobtype.member_id = m.member_id
");
return view('member.show',['num_member' => $number_of_member, 'data'
=> $data]);
}
错误是:
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name
'type_id' (SQL: SELECT m.member_id, m.member_name, m.email, m.password,
cl.club_name, ct.city_name, jobtype.type_name FROM members as m LEFT JOIN
clubs as cl ON cl.club_id = m.club_id LEFT JOIN cities as ct ON
ct.city_id = m.city_id LEFT JOIN (SELECT * FROM jobs as jb LEFT JOIN j_types
as jt ON jt.type_id = jb.type_id) as jobtype ON jobtype.member_id =
m.member_id )
解决方案
在内部选择type_id
同时存在于j_types
和jobs
表中,因此您必须选择其中之一。
(SELECT *
FROM jobs as jb
LEFT JOIN j_types as jt
ON jt.type_id = jb.type_id) as jobtype
更改为这样的内容:
(SELECT jb.*, jt.x, jt.y, jt.z
FROM jobs as jb
LEFT JOIN j_types as jt
USING (type_id)) as jobtype
推荐阅读
- flutter - .document() 似乎不适用于我的颤动代码的特定部分
- design-patterns - 在 Rust 中,当你需要一个引用持有结构来有时拥有它的引用数据时,模式是什么?
- hyperledger-fabric - 超级账本结构,无法通过 docker 启动 orderer
- docker - 已经使用 docker 限制,为什么服务器 cpu 平均负载仍然很高
- javascript - “无法对未安装的组件执行 React 状态更新”错误
- java - MySQL TestContainers init-script 模式创建失败
- mysql - 为什么在插入过程中发生重复键错误时设置共享锁
- javascript - 简单的 PurgeCSS
- c - C - 单独的链式哈希表 - 输出和空间问题
- javascript - 连续显示两个 Div 列,这样它也可以与 AMP(加速移动页面)一起使用