3

我有一个使用 3 个表的连接查询,但我遇到了这个问题 where 子句中的列 'id_f' 不明确

$id_f=$_GET['id_f'];

$query="SELECT *, s.name AS van, st.name AS naar, p.titl, p.vname
FROM p1_users, f_confirm AS v 
INNER JOIN s_steden AS s ON v.van = s.id
INNER JOIN s_steden AS st ON v.naar = st.id
INNER JOIN p1_users AS p ON v.id_f = p.id_f
AND DATE_FORMAT(date,'%Y-%c-%d')WHERE id_f='$id_f'";
$result=mysql_query($query)or die('Wrong query : ' . mysql_error());
$row=mysql_fetch_assoc($result);

谁能帮忙?

4

4 回答 4

3

这意味着,两个或多个表包含名称为“id_f”的列(在您的情况下是 p1_users 和 f_confirm )。您需要指定它与哪个表相关,如下所示:

AND DATE_FORMAT(date,'%Y-%c-%d')WHERE p.id_f='$id_f'";
于 2011-01-18T13:44:48.847 回答
1

不明确字段是查询中位于两个或多个表(或子查询)中的字段。

你有两个选择。

  1. 在每个不明确的字段上使用 table_name 前缀(table1.field_x、table2.field_x)
  2. 使用表别名,并使用别名作为每个不明确字段的前缀(alias1.x、alias2.x)。

在您的示例中,在 INNER JOIN 语句中,您使用“v.id_f = p.id_f”的别名,但是在 WHERE 子句中,您忘记了别名。

于 2011-07-13T15:53:20.247 回答
1

您需要在 where 子句中使用v.id_for p.id_f,因为两个表具有该名称的列,因此您需要消除歧义。

实际上,在这种情况下使用哪一个并不重要,因为您正在执行inner join.

如果您使用 a,这可能不是必需的,natural join但我不建议使用这些。

于 2011-01-18T13:43:07.183 回答
0

问题出在 WHERE 子句中,在 DATE_FORMAT 之后你写了 id_f='$id_f',但是在这个查询的其他表中你有这个列 (id_f)。所以数据库不知道你真正想要使用的哪个表。

于 2011-01-18T13:45:07.593 回答