在多表MySQL SELECT上重命名密钥

时间:2016-09-06 13:00:38

标签: mysql multi-table

我正在尝试获取3个不同表格的内容。

表A =包含我们的用户列表, 表B =返回与用户相关的合同, 表C =返回与合同相关的公式详细信息。

为了使它成为正确的方法,我正在使用以下多表请求:

SELECT * FROM rscm_students A, rscm_files B, rscm_formulas C
    WHERE B.dossier_status = 0
    AND A.student_agency = :agency
    AND B.file_student_id = A.id
    AND B.file_formula_id = C.id
    AND C.formula_place = 0
    GROUP BY A.student_uniqid
    ORDER BY B.file_date_create";

这是整个该死的东西变得有点复杂的地方。它返回正确的数据,但因为这里每个表的主键称为“id”。我不能在php中做一些foreach。如果我在1个用户上获得3个合同,则我无法重新组合同一用户阵列中的每个合同。

我仍然不是SQL专家,这就是我使用Phinx来控制数据库的原因。这也是我的主键被命名为“id”的原因。

如果你有个好主意,请告诉我!

1 个答案:

答案 0 :(得分:1)

好的,我会回答一下。

首先,不要使用

select *

上述选择适用于生产前快速和肮脏的开发。但它会使诸如与多个表中出现的常见列名联接(例如id和其他表)之类的事情变得混乱。

使用现代显式连接语法。不要使用旧的连接样式。因此,请使用joinon

最后使用表别名,为id列或其他冲突创建唯一的输出列名称,例如

A.id as aid, B.id as bid