You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术求助:从3张表创建无重复输出的View

解决视图生成重复行的问题

嘿,你这明显是踩了笛卡尔积的坑啦!你原来的代码里用逗号把authors和books直接拼在一起,但没加任何关联条件,数据库就会把每个作者和每本书都强行配对一遍,再加上主题的关联,行数不爆炸才怪呢。

问题根源

你写的FROM authors, books属于隐式内连接,但缺少authors和books之间的关联条件,导致两张表的所有行交叉匹配——比如如果有18个作者、15本书,光这俩表就会生成18×15=270行,这就是你看到的结果。

修正后的代码

首先得明确表之间的关联关系(假设books表有author_id关联authors的主键id,books的subject_id关联subjects的主键id),然后用显式连接语法加上关联条件:

CREATE VIEW book_summary(author_first_name, author_last_name, book_title, subject) 
AS 
SELECT 
    a.first_name, 
    a.last_name, 
    b.title, 
    s.subject
FROM 
    authors a
JOIN 
    books b ON a.id = b.author_id  -- 核心!让每本书只匹配对应的作者
LEFT JOIN 
    subjects s ON b.subject_id = s.id;  -- 补全你原代码未写完的主题关联条件

几点说明

  • 用显式JOIN语法比隐式逗号连接更清晰,也不容易漏加关联条件。
  • 给表起别名(a代表authors,b代表books,s代表subjects)能让代码更简洁好读。
  • 如果你的表关联字段不是id/author_id/subject_id,记得替换成你实际的字段名(比如如果用作者全名关联,条件就是a.first_name = b.author_first_name AND a.last_name = b.author_last_name,但更推荐用主键id关联,避免同名作者的问题)。
  • 正常关联后不会有重复行,DISTINCT可以去掉;如果确实有重复数据,再考虑保留它。

内容的提问来源于stack exchange,提问作者Dreeww

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:55:23