在左连接上为列名称别名

zeb*_*und 2 mysql alias server-side left-join

假设我有两个表,并且它们的主要标识符都使用名称"id".如果我想用这两个表执行连接,我将如何id为要与前一个表连接的表的别名进行别名?

例如:

SELECT * FROM `sites_indexed` LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` WHERE `url` LIKE :url
Run Code Online (Sandbox Code Playgroud)

现在,site_id应该与之链接sites_indexed.id.实际id它代表一行individual_data但具有相同的标题sites_indexed.

就个人而言,我喜欢只使用名称id,因为它保持一致.然而,当编写服务器端脚本时,它会让事情变得混乱.

例如

$var = $result['id'];

鉴于前面提到的查询,这不会混淆解释器吗?

无论如何,这是如何实现的?

小智 8

您应该使用"SELECT*"选择所有字段,而应明确命名所需的每个字段,并根据需要使用AS对其进行别名.例如:

SELECT si.field1 as si_field1,
       si.field2 as si_field2,
       ind_data.field1 as ind_data_field1
  FROM sites_indexed as si
  LEFT JOIN individual_data as ind_data 
         ON si.id = ind_data.site_id 
 WHERE `url` LIKE :url
Run Code Online (Sandbox Code Playgroud)

然后,您可以在结果集中引用别名.


joh*_*ohn 5

这个线程很旧,我发现是因为我遇到了同样的问题。现在我有一个更好的解决方案。Paul McNett和antun给出的答案会强制您列出所有字段,但是在某些情况下,这是不可能的(要列出的字段太多),因此您可以仅保留*和别名作为所需的字段(通常具有相同字段的字段)名称,并将彼此覆盖)。

这是如何做 :

    SELECT *, t.myfield as myNewName 
FROM table t ... continue your query
Run Code Online (Sandbox Code Playgroud)

您可以通过添加逗号来添加任意数量的别名。