mysql - SELECT * JOIN ON 主键 = 外键操作中的重复列?

标签 mysql sql join

我总是使用 JOINS 将主表的主键上的两个表链接到第二个表的外键。在这个示例数据库 books 中有 2 个表:

CREATE TABLE IF NOT EXISTS `classics` (
  `isbn` char(13) NOT NULL,
  `author` varchar(128) NOT NULL,
  `title` varchar(128) NOT NULL,
  `category` varchar(16) DEFAULT NULL,
  `year` char(4) NOT NULL,
  PRIMARY KEY (`isbn`),
  FULLTEXT KEY `author` (`author`,`title`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `customers` (
  `name` varchar(128) DEFAULT NULL,
  `isbn` char(13) NOT NULL DEFAULT '',
  PRIMARY KEY (`isbn`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我经常做类似这样的查询:

name    isbn    isbn    author  title   category    year
(row 1 values ...)
(row 2 ...)
(row 3 ...)

问题是 isbn 字段重复了。我如何做 SELECT * JOIN 查询只返回唯一字段而不求助于显式标识列 返回?

最佳答案

专业提示:避免在软件中使用 SELECT *,除非你有充分的理由使用它。

您已经观察到这样做的一个原因:JOIN 操作中的重复列问题。

其他原因:

如果您在请求中枚举列,则可以控制这些列在结果集中的显示顺序。

有人可以在您的表格中添加列,而无需更改您的软件。

检索不需要的列会减慢查询速度,有时会减慢很多。

关于mysql - SELECT * JOIN ON 主键 = 外键操作中的重复列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23507625/

相关文章:

SQL将表连接到自身以获取上一年的数据

php - MySQL 从 3 个表中选择并将其放入 PHP 数组中

sql - 显示具有 0 值的缺失行以维持顺序

sql - 从众多 Excel 文件中提取到一个数据表或文件

mysql - 如何在 MySQL 中选择与交叉链接表中的一组 id 匹配的表中的所有元素

mysql - 获取最新测试结果

sql - Mysql,不存在,选择

python - SqlAlchemy TIMESTAMP 'on update' 额外

mysql - 如何将一个表中存在重复值的数据合并到一行中?

php - 关注者/关注数据库结构