如何编写通过关系表获取结果的 SQL 语句? (多对多)
Posted
技术标签:
【中文标题】如何编写通过关系表获取结果的 SQL 语句? (多对多)【英文标题】:How to write a SQL statement which gets results via a relationship table? (many to many) 【发布时间】:2008-10-16 14:51:00 【问题描述】:我有 3 个表(存档有很多部分,部分(可能)属于很多存档):
archive
id PK
description
archive_to_section
archive_id PK FK
section_id PK FK
section
id PK
description
列出属于某个归档 id 的所有部分的 SQL 会是什么样子?
我只是在学习 SQL。从我读到的内容听起来我需要加入或工会?仅供参考,我正在使用 postgres。
[编辑]这是来自 gdean2323 的答案,没有别名:
SELECT section.*
FROM section
INNER JOIN archive_to_section
ON section.id = archive_to_section.section_id
WHERE archive_to_section.archive_id = $this_archive_id
【问题讨论】:
【参考方案1】:SELECT s.*
FROM section s INNER JOIN archive_to_section ats ON s.id = ats.section_id
WHERE ats.archive_id = 1
【讨论】:
有必要写缩写吗?对于初学者来说可能更容易理解。谢谢 不需要使用缩写(别名),很多人都使用它们。我不喜欢。查看别名***.com/questions/198196/when-to-use-sql-table-alias的优缺点讨论【参考方案2】:SELECT s.*
FROM archive_to_section ats
INNER JOIN section s ON s.id=ats.section_id
WHERE ats.archive_id= @archiveID
【讨论】:
没错。要意识到的重要一点是存档表并没有考虑到这一点。 我想你的意思是 INNER JOIN section s ON s.id=ats.section_id * 和 @ 符号是什么意思? * 表示该表的所有字段,@archiveID 是一个参数,如果您愿意,可以将其替换为您选择的archive_id。以上是关于如何编写通过关系表获取结果的 SQL 语句? (多对多)的主要内容,如果未能解决你的问题,请参考以下文章