【问题标题】:Column 'id_f' in where clause is ambiguouswhere 子句中的列 'id_f' 不明确
【发布时间】:2011-06-11 02:45:27
【问题描述】:

我有一个使用 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);

谁能帮忙?

【问题讨论】:

    标签: php mysql sql mysql-error-1052


    【解决方案1】:

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

    AND DATE_FORMAT(date,'%Y-%c-%d')WHERE p.id_f='$id_f'";
    

    【讨论】:

    • @mary 不要忘记接受答案。单击左侧分数下方的勾号。对您的所有问题都这样做,人们将更有可能为您回答。 :)
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      你有两个选择。

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-10-09
          • 2014-05-03
          • 1970-01-01
          • 2019-09-03
          • 2021-05-30
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多