比方说,我有两个表,并且它们拥有的初级标识符使用的名称“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'];
鉴于上述查询,就不会混淆这解释?
总之,这是怎么做到的呢?
而不是选择与各界“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
然后你就可以在你的结果集引用别名名称。
该线程是老,我发现,因为我有同样的问题。 现在我有一个更好的解决方案。 保罗McNett及安通迫使你给出的答案,列出所有字段,但在某些情况下,这是不可能的(太田列出),这样你就可以保持*,你想别名只有字段(通常具有相同的字段名字,并互相覆盖)。
这是如何做 :
SELECT *, t.myfield as myNewName
FROM table t ... continue your query
只要你想加入昏迷,你可以添加尽可能多的别名。
问题是,你正在使用通配符*。 如果明确列出查询中的列名,你可以给他们别名:
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'];
通过使用该表达式,你会得到的列编号 (从表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