我使用以下查询来查询三个表的内部联接。
其中两个表具有名为"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");
您需要使用表名限定列名。
SELECT table1.name1, table2.name1, etc.
您需要将选择列表中的列称为:
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
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
确实需要使用表名来分隔列。例如
SELECT table1.name1, table2.name1, etc.
正如@dud3所解释的,表1 table1.name1
中的列名name1
覆盖了表2 table2.name1
中的列名。
选择它们时可以使用AS
语句,以便在数组中分别接收它们。E.g
SELECT table1.name1, table2.name1 AS table2_name1, etc.
您可以使用任何不同的列名来表示table2_name1
。在这里,您将在形成的数组中使用不同的列名。