2013-03-13 145 views
1

我在我的SQL Server数据库中有3个表。SQL Server查询返回太多记录

它们链接在一起,如图在这张照片(线连接到图右行)

ER Model

我有一个查询,应自tblreparations有关的是一些信息返回全部赔偿但是它会为客户端(荷兰货币klant)分配给它的每台笔记本电脑返回3次赔偿,而赔偿表(仅限荷兰货币)只包含一个laptopID每行

这是查询:

SELECT AankopenReparaties.Id, 
     AankopenReparaties.KlantenId, 
     AankopenReparaties.actietype, 
     AankopenReparaties.voorwerptype, 
     laptopscomputers.merk, 
     laptopscomputers.model, 
     laptopscomputers.info, 
     AankopenReparaties.info, 
     AankopenReparaties.Prijs, 
     AankopenReparaties.lopend 
FROM AankopenReparaties, laptopscomputers 
WHERE (aankopenreparaties.lopend = 'lopend'); 

它返回

Query results

而且由于赔偿表(aankopenreparaties)只包含一个排,一个laptopID

有谁知道如何解决它应该只有一行这个?

请帮助,因为它应该尽快修复(这是学校的分配)

+4

使用ON子句查找JOIN。您正在使用的语法会导致CROSS JOIN,因为您没有指定两个表的关联方式。 – 2013-03-13 15:37:34

回答

6

为什么要返回记录过多的原因是因为你的查询生成两个表的笛卡尔积。你需要告诉服务器这两个表是如何相互关联的。

SELECT AankopenReparaties.Id, 
     AankopenReparaties.KlantenId, 
     AankopenReparaties.actietype, 
     AankopenReparaties.voorwerptype, 
     laptopscomputers.merk, 
     laptopscomputers.model, 
     laptopscomputers.info, 
     AankopenReparaties.info, 
     AankopenReparaties.Prijs, 
     AankopenReparaties.lopend 
FROM AankopenReparaties 
     INNER JOIN laptopscomputers 
      ON AankopenReparaties.LaptopID = laptopscomputers.ID -- specify relationship 
WHERE aankopenreparaties.lopend = 'lopend' 

为了进一步获得更多的知识有关加入,请访问以下链接:


+3

+1;可能有用的通知OP有关显式或隐式'JOIN' – Kermit 2013-03-13 15:37:09

+1

这完全有效:) – 2013-03-13 15:43:13

+1

很高兴它帮助':D' – 2013-03-13 15:43:37