mysql - 不明确的 `id` 字段

标签 mysql innodb

我有以下两个表:

system
- id
- systemName
- idOrganization

organization
- id
- officeSymbol

我正在运行以下查询并收到 id is ambiguous 错误:

SELECT system.systemName, organization.officeSymbol
FROM system
LEFT JOIN (organization)
ON (system.idOrganization = organization.id)

如您所见,我没有选择 id 列。如果我将 system.id 放在要选择的字段列表中,我就不会再收到此错误。不幸的是,处理这些数据的方式我无法返回 id - 我们不希望它显示给用户。

此外,如果我添加 GROUP BY system.systemName,我将不再收到错误 - 但这似乎不是最佳解决方案。

注意:LEFT JOIN 是有意为之,因为并非所有系统都将分配给组织。

SELECT VERSION()
--> 5.0.77-community-log

CREATE TABLE system (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `systemName` VARCHAR(45) DEFAULT NULL,
  `idOrganization` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_system_organization` (`idOrganization`),
  CONSTRAINT `fk_system_organization` 
    FOREIGN KEY (`idOrganization`) 
    REFERENCES `organization` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE organization (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `officeSymbol` VARCHAR(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

最佳答案

5.0.77 上测试:


SELECT  VERSION();

VERSION()
5.0.77


CREATE TABLE organization (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `officeSymbol` VARCHAR(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE system (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `systemName` VARCHAR(45) DEFAULT NULL,
  `idOrganization` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_system_organization` (`idOrganization`),
  CONSTRAINT `fk_system_organization`
    FOREIGN KEY (`idOrganization`)
    REFERENCES `organization` (`id`)
    ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT
INTO   organization
VALUES
        (1, 'Organization 1'),
        (2, 'Organization 2');
INSERT
INTO     system
VALUES  (1, 'System 1', 1),
        (2, 'System 2', 2);
SELECT  system.systemName, organization.officeSymbol
FROM    system
LEFT JOIN
        (organization)
ON      (system.idOrganization = organization.id);

systemName      officeSymbol
System 1        Organization 1
System 2        Organization 2

一切正常。

请注意,LEFT JOIN 在这里没有用,因为您有一个organizationFOREIGN KEY,并且总会有一个每个给定的系统的组织

在您对 @Artem Barger 的帖子的评论中,您说:

I'm only selecting on 5 of the 42 fields shared between these 2 tables

是否表和/或查询中还有其他字段?

由于您有句法错误,因此每个逗号都可能很重要。

关于mysql - 不明确的 `id` 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935299/

相关文章:

mysql - 根据复合主键的值读取增量数据

mysql - 如果未找到行,JOIN 条件中的回退值

innodb - 如何解决数据损坏问题?无法对表运行任何 SQL 查询

sql - 使用 MySQL 将任务分配给工作进程的正确方法

使用 TYPE=InnoDB 导入 MySQL

MySQL性能

MySQL - 查询输出合并数据

mysql - 获取 MySQL 运行的 ip_adress 和 port_number

mysql 从缓冲中排除模式

MySQL:2个字段的唯一数据