7

我正在使用以下查询查询三个表的内部联接。

其中两个表具有名为“name1”的列。我收到以下错误。

Column 'exName' in field list is ambiguous

“name1”列是外键,因此信息应该相同。任何人都可以提出一个紧凑的方法来解决这个问题吗?

$result = mysql_query("SELECT name1,name2,name3 FROM `table1` INNER JOIN `table2` ON table2.name1=table1.PrimaryKey INNER JOIN `table3` ON table3.name1=table1.PrimaryKey"); 
4

5 回答 5

17

您需要使用表名限定列名。

 SELECT table1.name1, table2.name1, etc.
于 2013-02-23T01:58:53.560 回答
1

您需要将选择列表中的列称为:

SELECT <table name>.name1, <table name>.name2, <table name>.name3

当您在 from 子句中引入表时,您还可以给表一个别名,以节省一些击键并使事情变得更简洁:

SELECT 
     t1.name1
    ,t2.name2
    ,t3.name3
FROM table1 AS t1
INNER JOIN table2 AS t2
    ON t2.name1 = t1.PrimaryKey
INNER JOIN table3 AS t3
    ON t3.name1 = t1.PrimaryKey
于 2013-02-23T02:01:43.987 回答
1

也许不是正确的问题,但我们如何能够创建这样的东西:

Table a
-------
id | x | y 
1 | 2 | 3 


Table b
-------
id | a_id | x | y 
1  | 1    | 2 | 3


SQL

SELECT * FROM
JOIN a.id = b.a_id

结果会是这样的:

array(
    a.id: 1,
    b.id: 1,
    a.x: 2
)

我的意思是什么

具有相同的表column names被合并,我猜第一个表的 ID 获胜。

于 2015-05-31T19:50:52.603 回答
0
SELECT T1.name1,T2.name2,T3.name3 
FROM `table1` T1 
INNER JOIN `table2` T2 ON t2.name1=t1.PrimaryKey 
INNER JOIN `table3` T3 ON t3.name1=t1.PrimaryKey
于 2013-02-23T02:00:04.327 回答
0

确实,您必须使用表名来分隔列。例如,

 SELECT table1.name1, table2.name1, etc.

正如@dud3 解释了name1table1中的列名table1.name1覆盖 table2中的列名的问题table2.name1

您可以AS在选择它们时使用该语句,以便在数组中单独接收它们。例如

SELECT table1.name1, table2.name1 AS table2_name1, etc.

您可以使用任何不同的列名来表示table2_name1。在这里,您将在形成的数组中使用不同的列名。

于 2020-10-15T15:04:25.070 回答