别名在左边的列名加盟(Alias a column name on a left join)

2019-09-21 06:21发布

比方说,我有两个表,并且它们拥有的初级标识符使用的名称“ID”。 如果我想执行与这两个表的联接,我怎么会别名id ,我想与旧表加入的表?

例如:

SELECT * FROM `sites_indexed` LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` WHERE `url` LIKE :url

现在,SITE_ID应该与连接起来sites_indexed.id 。 实际的id表示该行的individual_data但是具有相同的标题 sites_indexed

就个人而言,我喜欢只使用名称id的一切,因为它让事情保持一致。 然而,当脚本服务器端,它可以使事情混淆。

$var = $result['id'];

鉴于上述查询,就不会混淆这解释?

总之,这是怎么做到的呢?

Answer 1:

而不是选择与各界“SELECT *”你应该明确地命名每个需要领域,拥有根据需求,混淆他们。 例如:

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

然后你就可以在你的结果集引用别名名称。



Answer 2:

该线程是老,我发现,因为我有同样的问题。 现在我有一个更好的解决方案。 保罗McNett及安通迫使你给出的答案,列出所有字段,但在某些情况下,这是不可能的(太田列出),这样你就可以保持*,你想别名只有字段(通常具有相同的字段名字,并互相覆盖)。

这是如何做 :

    SELECT *, t.myfield as myNewName 
FROM table t ... continue your query

只要你想加入昏迷,你可以添加尽可能多的别名。



Answer 3:

问题是,你正在使用通配符*。 如果明确列出查询中的列名,你可以给他们别名:

SELECT `sites_indexed`.`id` AS `sites_indexed_id`,
       `individual_data`.`id` AS `individual_data_id`
       FROM `sites_indexed` 
       LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` 
       WHERE `url` LIKE :url

然后,您可以通过别名引用它们:

是$ var = $结果[ 'sites_indexed_id']; $ var_b = $导致[ 'individual_data_id'];



Answer 4:

通过使用该表达式,你会得到的列编号 (从表sites_indexed)ID2结果(别名从表individual_data id列)

SELECT t1 . *, t2 . * FROM sites_indexed t1
LEFT JOIN (select id as id2, other_field1, other_field2 FROM individual_data) t2 ON t1.id = t2.site_id WHERE your_statement


文章来源: Alias a column name on a left join