SQL左连接自动别名?

时间:2010-04-19 16:33:04

标签: php sql left-join

我刚刚意识到由于在连接表中重复列名,我将不得不开始别名我的数据库调用。有没有办法自动告诉SQL别名我的所有列名,以便返回前缀为表名?否则,当只有其中一些是别名时,它似乎很混乱。只是努力保持一致,而不需要编写大量的额外代码。

$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name
    FROM contracts
    LEFT JOIN jobs ON contracts.job_id = jobs.id
    LEFT JOIN companies ON contracts.company_id = companies.id
    WHERE contracts.id = '$id'
    ORDER BY contracts.end_date";

4 个答案:

答案 0 :(得分:4)

不,但是你可以通过使用表别名来使生活更轻松:

SELECT c.po_number, c.start_date, c.end_date, c.description, 
    c.taa_required, c.account_overdue, j.id AS jobs_id, j.job_number, 
    cm.id AS companies_id, cm.name AS companies_name 
FROM contracts c
LEFT JOIN jobs j ON c.job_id = j.id 
LEFT JOIN companies cm ON c.company_id = cm.id 
WHERE c.id = '$id' 
ORDER BY c.end_date

答案 1 :(得分:0)

你可以在你的sql语句中使用别名表,所以你必须少写,但实际上从php访问列,如果你想通过名称访问它们,就无法对所有列进行别名处理。

你也可以使用php的索引访问列,但这是一个维护噩梦

答案 2 :(得分:0)

我建议始终使用别名表名。如果你跳过别名,它很难在以后阅读。

答案 3 :(得分:0)

有关信息,这是MySQL 5.6中的问题(可能是其他人!)

SELECT * FROM table1 LEFT JOIN table2 ON PKI = FKI

按预期工作..但最近我在一个查询中误将'LEFT'作为'LEFY'而且它也有效但是标准连接!所以

SELECT * FROM table1 LEFY JOIN table2 ON PKI = FKI

也可以像LEFY一样替代,所以要小心改变你的查询!