我目前正在学校学习数据库,但不幸的是,我们的老师根本不喜欢帮助或回答问题。我目前正在进行几个Oracle DB练习,而且我遇到了一个我真的不知道如何解决的问题。
表1:学生
ID FAMILY NAME FIRST NAME BIRTH DATE IM_DATE FACULTY
4711 Lehmann Heini 13.03.89 01.09.08 I
4712 Huber Sven 14.07.89 01.09.08 IWI
4713 Meier Swantje 11.04.88 01.03.09 IWI
4714 Tunix Ole 15.03.88 01.03.09 IWI
4715 Kannix Peter 02.11.89 01.03.09 IWI
4716 Weissnix Axel 15.12.88 01.03.09 IWI
表2:LN
ID FKBEZ VNR P_DATE GRADE
4711 DB1 1 02.02.08 4,7
4711 DB1 2 07.07.09 5
4711 PR1 1 28.01.09 3
4712 DB1 1 02.02.08 3,7
4713 DB1 1 02.02.08 1,7
4713 DB2 1 02.02.09 3,7
4714 PR1 1 28.01.09 2
4715 DB1 1 02.02.08 5
4711 DB2 1 14.07.09 1,3
4711 PR2 1 30.06.09 2,3
现在,问题就在这里。
Q1:创建一个SQL查询(JOIN),这将导致重复的行。 Q2:从Q1更改您的查询,现在它不会显示任何重复项。
我的第一个问题'这是我不能100%确定复制的定义是什么。即使您没有在SELECT命令中选择它们,也会在所有列上复制具有100%相同内容的行吗?
实施例: 说我已经创建了一个查询,并且我已经选择了“家庭名称”列。和'年龄'在我的SELECT命令中,我的结果如下所示:
Family Name Age
Miller 20
Miller 20
但这些实际上是两个不同的人,并且有不同的名字。这些是否有资格作为重复,因为我没有选择名字,因此它没有显示,或者不重要我通过SELECT选择的内容和重复的行只有它们符合重复项#&# 39; 100%完全相同?
好的,回到我的问题。 对于 Q1 ,我选择了一个看起来像这样的简单(INNER)JOIN查询
SELECT S.ID,S.Family_Name,S.First_Name,LN.FKBEZ 来自学生S. 加入LN ON S.ID = LN.ID
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
这是结果。我还没有选择等级#39;在我的查询中,但我已经为你列出了它,所以你可以更好地理解我的问题。 现在,因为我还没有选择等级'在我的查询中,我认为第1 + 2行是重复的,因为它们在每个可见列中都相同。然后我继续使用Q2并使用完全相同的查询,这次只使用NATURAL JOIN(因为这会消除所有重复的行),但结果完全相同。
所以现在我的结论是,如果行在每个可见和'隐藏' 上100%完全相同,则只会被视为重复行柱。 但是现在我真的很难过,因为我不知道如何解决Q1 + Q2。
重要的是要知道,我们不应该使用DISTINCT或GROUP BY来解决这些问题。只有(不同种类)JOINS,INTERSECT,UNION和MINUS。
我想你可以看到我在撰写这篇文章时投入了大量的时间和精力,所以我非常感激,如果你们能帮我解决这个问题。
感谢。
答案 0 :(得分:-1)
尝试使用左连接。没有相应的记录在第二个表中将具有空值。 ES。从t1,t2中选择*其中t1离开连接t2。 t2上的非匹配值将为null