Sql 从联接中删除重复项
我现在正在学校学习数据库,但不幸的是,我们的老师根本不喜欢帮助或回答问题。我现在正在做几个Oracle DB练习,遇到了一个我真的不知道如何解决的问题 表1:学生Sql 从联接中删除重复项,sql,inner-join,outer-join,cross-join,natural-join,Sql,Inner Join,Outer Join,Cross Join,Natural Join,我现在正在学校学习数据库,但不幸的是,我们的老师根本不喜欢帮助或回答问题。我现在正在做几个Oracle DB练习,遇到了一个我真的不知道如何解决的问题 表1:学生 ID FAMILY NAME FIRST NAME BIRTH DATE IM_DATE FACULTY 表2:LN ID FKBEZ VNR P_DATE GRADE 现在,问题来了 Q1:创建一个SQL查询(联接),该查询将导致重复的行
ID FAMILY NAME FIRST NAME BIRTH DATE IM_DATE FACULTY
表2:LN
ID FKBEZ VNR P_DATE GRADE
现在,问题来了 Q1:创建一个SQL查询(联接),该查询将导致重复的行。 Q2:将您的查询从Q1更改为现在不会显示任何重复的查询 我的第一个“问题”是,我不能100%确定重复的定义是什么。即使未在SELECT命令中选择,所有列上的内容是否都是100%相同的重复行 例如: 假设我创建了一个查询,并在SELECT命令中选择了“Family Name”和“Age”列,结果如下所示:
Family Name Age
但他们实际上是两个不同的人,有不同的名字。因为我没有选择名字,所以没有显示,这些行是否符合重复的条件?或者,我通过选择和重复行选择的内容是否重要?如果它们100%相同,则仅符合重复的条件 好的,回到我的问题上来。 对于Q1我选择了一个简单的(内部)连接查询,如下所示 选择S.ID、S.Family_Name、S.First_Name、LN.FKBEZ 来自学生的 加入LN 在S.ID=LN.ID上
FAMILY NAME FIRST NAME FKBEZ (GRADE)
这就是结果。我没有在我的查询中选择“GRADE”,但我也为您列出了它,这样您可以更好地理解我的问题。 现在,由于我没有在查询中选择“等级”,所以我认为行1 + 2是重复的,因为它们在每个<强>可见/强>列中是相同的。然后我继续到Q2,使用了完全相同的查询,只是这次使用了自然连接(因为这将消除所有重复的行),但结果完全相同 所以现在我的结论是,只有在每个可见的和不可见的列上的行100%相同时,才认为它们是重复的。 但现在我实际上完全被难住了,因为我不知道如何解Q1+Q2 重要的是要知道,我们不应该使用单独的或分组的方法来解决这些问题。只有(不同类型的)连接、相交、并集和负数 我想你们可以看到,我在撰写这篇文章上花了很多时间和精力,所以如果你们能帮我完成这篇文章,我将非常感激
谢谢。尝试使用左连接。第二个表中没有相应的记录具有空值。锿。从t1、t2中选择*其中t1向左连接t2。t2上的不匹配值将为空请尝试使用左连接。第二个表中没有相应的记录具有空值。锿。从t1、t2中选择*其中t1向左连接t2。t2上的不匹配值将为空基于您在提问时表现出的理解,我不太确定课堂是否会帮助您。我认为您需要提醒您的讲师进行一些澄清。你至少可以问他关于你的第一个“答案”,在这里你只是包括/排除列,或者可能在连接中添加列。您必须保留非复制行吗?一个
UNION
将为您执行一个DISTINCT
,所以这是一种欺骗。您可以获得最大/最小值,而无需显式添加GROUP BY
子句(也可作弊)<代码>交集/减号
处理集合,因此将有助于保留/删除所有行,除非先对它们进行重复数据消除<代码>自然连接=连接
w/条件,几乎……我是个白痴,我忘了有一种方法可以用左连接
s(在任何RDBMS中都有效)实现这一点。查看SO,了解如何查找/删除重复项或在[Best-n-per-group]中查找/删除重复项。不过,这不是直观的,所以人们通常需要向他们指出。根据你在提问时表现出的理解,我不太确定这门课是否会帮助你。我认为你需要让你的导师澄清一下。你至少可以问他关于你的第一个“答案”,在这里你只是包括/排除列,或者可能在连接中添加列。您必须保留非复制行吗?一个UNION
将为您执行一个DISTINCT
,所以这是一种欺骗。您可以获得最大/最小值,而无需显式添加GROUP BY
子句(也可作弊)<代码>交集/减号
处理集合,因此将有助于保留/删除所有行,除非先对它们进行重复数据消除<代码>自然连接=连接
w/条件,几乎……我是个白痴,我忘了有一种方法可以用左连接
s(在任何RDBMS中都有效)实现这一点。查看SO,了解如何查找/删除重复项或在[Best-n-per-group]中查找/删除重复项。不过,这不是直观的,所以人们通常需要向他们指出它。您正在混合连接样式,也可以使用。。。从t1向左连接t2到…
或。。。从t1到t2,其中…
。对不起,这是“惯例”。在t1.column=t2.column上选择*from t1 join t2.LEFT join
,internal join
,不管怎样,他的问题其实并不在于join的类型……你是在混合join样式,也可以选择。。。从t1向左连接t2到…
或。。。从t1到t2,其中…
。对不起,这是“惯例”。在t1.column=t2.column上选择*从t1连接t2。左连接
,内部连接
,不管怎样,他的问题并不是真正的连接类型。。。
Family Name Age
Miller 20
Miller 20
FAMILY NAME FIRST NAME FKBEZ (GRADE)
Lehmann Heini DB1 4,7
Lehmann Heini DB1 5
Lehmann Heini PR1 3
Huber Sven DB1 3,7
Meier Swantje DB1 1,7
Meier Swantje DB2 3,7
Tunix Ole PR1 2
Kannix Peter DB1 5
Lehmann Heini DB2 1,3
Lehmann Heini PR2 2,3