Php 完整性约束冲突错误

Php 完整性约束冲突错误,php,mysql,Php,Mysql,我得到以下错误: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous 我不知道它是从哪里来的。stacktrace对此也不清楚。引发此错误的查询: Database::executeQuery('CREATE TEMPORARY TABLE tmp_inventory ENGINE=MEMORY ' . 'SELECT id, e

我得到以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous
我不知道它是从哪里来的。stacktrace对此也不清楚。引发此错误的查询:

Database::executeQuery('CREATE TEMPORARY TABLE tmp_inventory ENGINE=MEMORY '
                . 'SELECT id, email_hash, mailing_list_id, ttl, price, last_click, last_view, extra_data '
                . 'FROM inventory i INNER JOIN mailing_list ml on i.mailing_list_id = ml.id '
                . 'WHERE i.active = 0 AND i.deleted = 1 AND i.completely_deleted = 1 AND i.resting_to < NOW() AND i.next_sync_at < NOW() AND ml.active = 0 '
                . 'LIMIT 10;');
以及邮寄名单:

CREATE TABLE `mailing_list` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  `price` int(10) unsigned NOT NULL DEFAULT '1000',
  `ttl` int(10) unsigned NOT NULL DEFAULT '604800',
  `resting_time` int(10) unsigned NOT NULL DEFAULT '0',
  `email_from` varchar(255) DEFAULT NULL,
  `email_return_path` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

有什么问题吗?

在您的查询中,您正在访问两个表:
inventory
在您的FROM子句中,在您的内部JOIN子句中,
mailing\u list
。 这两个表都有一个名为
id
的列,因此数据库不知道您所指的是哪一列


若要解决此问题,请在选择中指定表,方法是将
id
替换为
i.id
ml.id

查询不知道id字段是否来自表邮寄列表或库存。您应该使用i.id或ml。id@Unex您应该将其作为答案发布,以便khernik可以验证:)这是关于使用正确的表名或别名为查询字段添加前缀的问题是的,我知道,但从中获得分数太容易了:我无法更改查询:D如果有任何问题,我只能更改数据库结构。您不能更改查询吗?你到底在搞什么?您可以更改不需要的id字段的名称。但实际上这是一个非常糟糕的解决方案!我不能更改查询,只能更改表结构。
mailing\u list.id
列在内部JOIN子句中被引用,因此您不能更改该列名。您可以将
inventory.id
更改为类似于
inventory.\u id
,但随后必须更改SELECT子句
CREATE TABLE `mailing_list` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  `price` int(10) unsigned NOT NULL DEFAULT '1000',
  `ttl` int(10) unsigned NOT NULL DEFAULT '604800',
  `resting_time` int(10) unsigned NOT NULL DEFAULT '0',
  `email_from` varchar(255) DEFAULT NULL,
  `email_return_path` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
)