MySQL没有使用INNER JOIN在单独的表中显示重复的列名

时间:2014-02-17 17:50:28

标签: php mysql sql join inner-join

我有一个包含22个表的数据库,大多数表都有几个具有相同名称的列字段。当我在具有重复列名的表上使用INNER JOIN时,它将在最后一个表中忽略它们。现在我只加入3桌

SELECT * FROM company C 
INNER JOIN typeofdealer PI ON C.CompanyID = PI.CompanyID 
INNER JOIN typeofservices TS ON PI.CompanyID = TS.CompanyID

因此,在此示例中,typeofdealertypeofservices都包含列名OtherOtherText当我收到此查询时,我只看到一个Other和一个OtherText

我刚刚发现,当我写这篇文章时,如果我在“phpmyadmin”中进行查询,我会完全按照预期恢复。我正在使用php中的预准备语句执行此查询,并使用以下方法输出结果:

echo "<PRE>";
print_r($results);
echo "</PRE>";

我认为问题是php数组不能包含重复的字段,所以有没有办法绕过我遇到的问题?

2 个答案:

答案 0 :(得分:1)

正如您所理解的那样,问题是PHP不允许多个条目进入具有相同键名的数组。

最简单的方法是对查询的列选择部分中的字段进行别名,如下所示:

SELECT *, typeofservices.Other as ServicesOther, typeofservices.OtherText as ServicesOtherText FROM company C 
INNER JOIN typeofdealer PI ON C.CompanyID = PI.CompanyID 
INNER JOIN typeofservices TS ON PI.CompanyID = TS.CompanyID

它不漂亮,但很简单。

答案 1 :(得分:1)

您可以为此做的解决方法是使用别名AS来区分具有相同名称的列。类似的东西:

SELECT PI.Other AS Other1, PI.OtherText AS OtherText2, TS.Other AS Other2, TS.OtherText AS OtherText2 FROM company C 
INNER JOIN typeofdealer PI ON C.CompanyID = PI.CompanyID 
INNER JOIN typeofservices TS ON PI.CompanyID = TS.CompanyID

实际上,如果省略AS关键字SELECT PI.Other Other1, PI.OtherText OtherText2

,它将以相同的方式工作