2017-10-10 140 views
1

我是SQL新手,正在学习内部连接。但是,当我运行我的查询时,我收到的输出比我应该多。在我的INNER JOIN sql查询中获取重复的输出

SELECT   pfr.pno AS 'Property Number', 
        pfr.street, 
        pfr.rooms, 
        pfr.rent, 
        CONCAT(o.fname, ' ', o.lname) AS 'Owner Name', 
        CONCAT(s.fname,' ',s.lname) AS 'Staff Name', 
        v.date, 
        v.comment 
From    property_for_rent AS pfr 
INNER JOIN owner AS o 
ON     pfr.ono = o.ono 
INNER JOIN staff AS s 
ON     pfr.sno = s.sno 
INNER JOIN viewing AS v 
ON     pfr.pno = v.pno 
WHERE   pfr.pno = 'PG4'; 

我附上了我输出的截图。我希望这是足够的信息! 1的关系:

Query Output Image

Table in use Image

+1

您的重复项不重复。你在查看时有2行与该pfr编号相匹配(我假设这意味着该属性已被查看2次)。一个在五月份没有评论,一个在四月的某个时候“太偏远”。 – Twelfth

+0

显然你在这些表上有一对多的关系。我认为它的行为是正确的。这只是你想要处理重复数据的逻辑问题。 – Eric

+0

显示该ID的查看表数据 – Rams

回答

1

当您加入两个表,这会如果你没有1发生。

例如,您在“查看”表中有两条记录,因此即使只有一个属性,也必须显示两行。

如果想要一个属性结果,则需要逻辑地聚合查看表,例如通过获取属性的最近查看。

0

我不会考虑这些重复的行。如果您查看PG4交易的日期栏,您会注意到日期不同。这是两个不同的交易,不被视为蠢事。如果您只想返回特定列的一个记录,则可以考虑使用Distinct子句。希望这可以帮助!