Ant*_*ony 8 mysql sql alias join
我有一种情况,其中属性表包含地址ID(来自g_addresses表),而申请人表还包含来自g_addresses的地址ID.我想一起加入这些,但选择表格中的所有字段.
我知道使用'as'来为字段创建别名,但有没有办法为整个表生成别名?
SELECT *
FROM (`reference`)
LEFT JOIN `applicants` ON `applicants`.`id` = `reference`.`applicant_id`
LEFT JOIN `g_people` applicant_person ON `applicant_person`.`id` = `applicants`.`person_id`
LEFT JOIN `g_addresses` applicant_address ON `applicant_address`.`id` = `applicants`.`address_id`
LEFT JOIN `properties` ON `properties`.`id` = `reference`.`property_id`
LEFT JOIN `g_addresses` property_address ON `property_address`.`id` = `properties`.`address_id`
WHERE `reference`.`id` = 4
Run Code Online (Sandbox Code Playgroud)
这会产生一个只包含一个地址行但不包含两者的结果.返回的行是最后一个连接的行而不是之前的行,表示它在返回时被覆盖.
And*_*y M 15
我不认为你应该使用屏蔽的引用,如*或`reference`.*,你的情况,因为你可能有包含相同的列名(行集结束id,address_id).
如果要从连接表中提取所有列,则应该在SELECT子句中单独指定它们,并为每个列分配唯一的别名:
SELECT
ref.`id` AS ref_id,
ref.`…` AS …,
…
app.`id` AS app_id,
…
FROM `reference` AS ref
LEFT JOIN `applicants` AS app ON app.`id` = ref.`applicant_id`
LEFT JOIN `g_people` AS ape ON ape.`id` = app.`person_id`
LEFT JOIN `g_addresses` AS apa ON apa.`id` = app.`address_id`
LEFT JOIN `properties` AS pro ON pro.`id` = ref.`property_id`
LEFT JOIN `g_addresses` AS pra ON pra.`id` = pro.`address_id`
WHERE ref.`id` = 4
Run Code Online (Sandbox Code Playgroud)