Mysql - 如何在左连接中为整个表添加别名

标签 mysql sql join alias

我遇到这样一种情况,其中一个属性表包含一个地址 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 

这会产生一个只包含一个地址行而不是两个地址行的结果, 返回的行是来自最终连接的行而不是之前的行,表明它在返回时被覆盖。

最佳答案

我认为你不应该使用掩码引用,比如 *`reference`.*,在你的情况下,因为你最终可能会得到一个行集包含相同的列名(idaddress_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

关于Mysql - 如何在左连接中为整个表添加别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150209/

相关文章:

mysql - 加入有条件的表

php - 留空时多个下拉菜单查询结果

mysql - 加入具有超过 1 个关系的 3 个表

php mysql - 拼写转换?

php - MySQL 动态选择框

mysql - 编写一个 sql 查询以使用来自另一列的子字符串将列添加到数据框

Mysql查询5张表

MySQL超长查询,内连接

php - 如何使用 .ajax 提取 mysql 数据并用它填充表单

mysql - 将表 1(外键)中的 2 列连接到表 2(主键) - 如何避免 JOIN BUFFER?