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

时间:2014-05-07 02:21:26

标签: 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查询只返回唯一字段而不需要明确标识列 返回?

2 个答案:

答案 0 :(得分:1)

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

您已经发现了一个这样做的原因:JOIN操作上的重复列问题。

其他原因:

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

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

检索您不需要的列可能会减慢查询速度,有时甚至会很慢。

答案 1 :(得分:0)

您需要明确包含所有列,但您可以采用捷径。以下是表格中的示例:

select cl.*, c.name as customer_name
from customers c join
     classics cl
     on c.isbn = cl.isbn;