[英]“Column 'id' in where clause is ambiguous” after inner joining?
我有这个选择查询,在我执行内部联接之前,它运行良好。
$id = (int) $_GET['id'];
$data = mysql_query("
SELECT
events.start_datetime,
events.EVENT_NAME,
events.START_TIME,
events.END_TIME,
events.VENUE_LOCATION,
venues.VENUE_NAME
FROM
events
INNER JOIN venues
ON events.VENUE_LOCATION = venues.ID
WHERE
id = ".$id) or die(mysql_error());
$id
变量使查询根据行从URL加载数据(即:page.php?id = 1)。
知道有什么问题吗? 谢谢
在WHERE子句中,更改id
对events.id
或venues.id
,无论你的意思。 不幸的是,无论是MySQL还是我都猜不到您的意思。
场所可能也有一个id字段,因此您需要指定events.id
,而不仅仅是id
,即
$id = (int) $_GET['id'];
$data = mysql_query("
SELECT
events.start_datetime,
events.EVENT_NAME,
events.START_TIME,
events.END_TIME,
events.VENUE_LOCATION,
venues.VENUE_NAME
FROM
events
INNER JOIN venues
ON events.VENUE_LOCATION = venues.ID
WHERE
events.id = ".$id) or die(mysql_error());
我猜在表events
中也有列id
? 如果是这样,这个名字是模糊的,因为MySQL不知道,如果你在谈论events.id
或venues.id
。 没有将其命名为要选择的列之一也没关系。 它存在于多个表中,因此您必须告诉它实际上想要哪个表。
您没有指定查询使用哪个表中的id,并且两个表的列名称都为“ id”,因此,它将引发“ where子句不明确的列'id'”错误。 因此,通过将带有id的表名放在where子句中来更改查询。
Put either WHERE events.id = ... or WHERE venues.id = ...
如果列名不是单个表唯一的,则必须用表名(或适当的表别名)来限定它。 因此,显然id
出现在两个表中。 从描述中,听起来好像是添加了表格的venues
,所以(在这里猜测)您可能需要将其限定为WHERE子句中的events.id
。
所以今天我在为WordPress插件构建SQL构建器类时遇到了此错误。 当我尝试执行这样的查询时;
SELECT ID,post_author,user_login,post_title,user_login,user_email FROM wp_users INNER JOIN wp_posts USING (post_title)
我发现有关ID的错误模棱两可,因此我进行了一些研究并找出了问题所在。
我试图连接的两个表都有一个名为ID的列,并且由于我没有指定特定的列,因此MYSQL对于我要从哪个表中进行选择感到困惑。
因此,一旦我用wp_post.ID或wp_users.ID替换了ID,错误就消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.