2

可能重复:
如何 LEFT JOIN 两个具有相同列名的表

我有这样的声明:

$sql = "SELECT * FROM deliveries AS del 
        LEFT JOIN job_sheet ON job_sheet.job_id=del.jID
        LEFT JOIN hierarchy AS h ON job_sheet.h_str=h.hID
        LEFT JOIN customers ON h.cust=customers.ID";

我的问题是“客户”表有一个名为 ID 的列,“交货”表也是如此。当我运行 while 循环以输出结果时,问题就开始了。

while($data = mysql_fetch_array($sql))
{
     echo $data['ID'];
}

它输出最后一个加入的表的值......我怎样才能将两者分开?我的意思是,我需要能够从两个表中输出“ID”,但在查询中,它是最后一个获胜的表。重命名列不是一种选择...

有什么输入吗?

4

3 回答 3

2

您需要显式调用列,而不是*在查询中使用和别名列具有相同名称:

SELECT 
   del.ID as delivery_id,
   customers.ID as customer_id,
   .....
FROM deliveries AS del 
LEFT JOIN job_sheet ON job_sheet.job_id=del.jID 
LEFT JOIN hierarchy AS h ON job_sheet.h_str=h.hID 
LEFT JOIN customers ON h.cust=customers.ID
于 2012-12-10T20:34:19.673 回答
1

我通过一些调整弄清楚了:

    SELECT 
       deliveries.*, 
       job_sheet.*,
       customers.ID as CUSTOMERID
       FROM deliveries 
          LEFT JOIN job_sheet ON job_sheet.job_id=deliveries.jID 
          LEFT JOIN hierarchy ON job_sheet.h_str=hierarchy.hID 
          LEFT JOIN customers ON hierarchy.cust=customers.ID

鉴于我需要从客户表中获取的唯一内容是别名“ID”,同时保留其他两个表中的所有其他列。

我的 while 循环最终将变为:

while($data = mysql_fetch_array($sql))
{
    echo $data['CUSTOMERID']; // For the customer's ID
    echo $data['ID']; // For the delivery ID
}
于 2012-12-10T20:59:35.990 回答
0

您需要明确指定所需的列。就个人而言,我对选择列表中的“*”没有这么大的问题,只要它是别名。就像是:

select del.*, job_sheet.col1, . . .
于 2012-12-10T20:34:47.507 回答