SQL中两个表的交集

Posted

技术标签:

【中文标题】SQL中两个表的交集【英文标题】:Intersection of Two Tables in SQL 【发布时间】:2019-04-09 13:28:15 【问题描述】:

基本上我需要创建一个使用其他两个表的特定信息的新表。

例如,我有一个名为 person 的表,其中包含元素 person_id、first_name、last_name、gender、age 和 fav_quote。我有第二个表,名为部门,其中包含元素 dept_id、dept_name 和 building。我现在需要创建包含 person_id 和 dept_id 元素的交集表。并且两者都必须是主键(我假设这只是在我的源代码中表示 PRIMARY KEY (person_id, dept_id) 命令)。

创建表人(

person_id INT(8) NOT NULL auto_increment,

first_name VARCHAR(25) NOT NULL,

last_name VARCHAR(25) NOT NULL,

性别 VARCHAR(1),

年龄 INT(8),

fav_quote 文本,

主键(person_id)

);

创建表部门(

dept_id INT(8) NOT NULL auto_increment,

部门名称 VARCHAR(25) 非空,

构建 VARCHAR(25) NOT NULL,

主键(dept_id)

);

这是我最初的两个表的代码,我只是不确定如何创建一个交集,并且在回顾我的笔记后,我找不到关于如何编写它的说明。

【问题讨论】:

嗨。在您在查询介绍中看到的众多示例查询中,您想要什么?此外,“交叉点”在这里没有任何意义。使用足够的单词和句子来真正说出你的意思。例如,在表、行、行中的列的值等方面。如果你不强迫自己说出你的意思,你怎么能期望推理和交流重新查询?如果您清楚地表达了您的问题/目标/问题,您可以通过谷歌搜索找到答案。 (在这里,对于这个明显的基本常见问题解答,但也是一般性的)。 这是我必须继续执行的所有指令,使用我已经说过的确切语言“交叉表”。我已经用许多不同的术语搜索了它。这是一个我需要做的学校项目,我不仅回顾了自己的课程和以前的工作,而且还咨询了各种解释性网站。如果您不清楚,我深表歉意,但这正是我所面临的斗争。 你不想要“两个表的交集”,因为你的标题错误地说;你想要“一个交集表”。再说一次,你见过什么例子?这对你没有帮助吗? 【参考方案1】:

您需要一个包含 2 个字段的表格; person_id 和 dept_id。该表将具有两个表个人和部门主键的外键以及两者的复合主键。

此外,仅当人员与部门之间存在一对多关系时,才需要此表。否则只需亲自添加 dept_id 作为外键。

【讨论】:

【参考方案2】:

你得到了正确的主键部分。我会将外键添加到您现有的表中,以防止与不存在的人员或部门进行交互:

CREATE TABLE person_department
    person_id INT(8) NOT NULL,
    dept_id INT(8) NOT NULL,
    PRIMARY KEY(person_id, dept_id),
    FOREIGN KEY(person_id) REFERENCES person(person_id),
    FOREIGN KEY(dept_id) REFERENCES department(dept_id)
)

【讨论】:

谢谢,这很有帮助!

以上是关于SQL中两个表的交集的主要内容,如果未能解决你的问题,请参考以下文章

mysql两表汇总后再得到两表的交集和差集,请问怎么实现?

mysql中有2个结构一样的表,我想把两个表的交集存到另一个表中,请问怎么操作呢?

如何删除与隐藏交集表的多对多关联中的记录?

ES6数组:两个数组或数组对象取并集、交集、差集

从具有交集和联合但也具有其他独特属性的两个表中进行 SQL 查询

SQL语句:两个时间区间段,只要有交集,就能筛选出来