我总是使用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查询只返回唯一字段而不需要明确标识列 返回?
答案 0 :(得分:1)
专业提示:避免在软件中使用SELECT *,除非您有充分的理由使用它。
您已经发现了一个这样做的原因:JOIN操作上的重复列问题。
其他原因:
如果您在请求中枚举了列,则可以控制这些列在结果集中的显示顺序。
有人可以在您的表格中添加列,而无需更改软件。
检索您不需要的列可能会减慢查询速度,有时甚至会很慢。
答案 1 :(得分:0)
您需要明确包含所有列,但您可以采用捷径。以下是表格中的示例:
select cl.*, c.name as customer_name
from customers c join
classics cl
on c.isbn = cl.isbn;