关于SQL视图的问题。尝试从两个表开发视图。这两个表有相同的主键,除了第一个表有所有主键外,第二个表有一些主键,但不是全部。当我对它们进行内部连接时,我得到了一个记录集,但它并不完整,因为第二个表并不包含所有的记录。在我的视图中,有没有一种方法可以编写逻辑,声明如果键不在表#2中,插入一个零,那么整个记录集就会显示在视图中?我想要显示视图中的所有记录,即使没有要进行内连接的内容。
下面是我的例子:
SELECT dbo.Baan_view1b.Number, dbo.Baan_view1b.description, dbo.Baan_view1b.system, dbo.Baan_view1b.Analyst, dbo.Baan_view1b.[User],
dbo.Baan_view1b.[Date Submitted], dbo.Baan_view1b.category, dbo.Baan_view1b.stage, MAX(dbo.notes.percent_developed) AS Expr1
FROM dbo.Baan_view1b INNER JOIN
dbo.notes ON dbo.Baan_view1b.Number = dbo.notes.note_number
GROUP BY dbo.Baan_view1b.Number, dbo.Baan_view1b.description, dbo.Baan_view1b.system, dbo.Baan_view1b.Analyst, dbo.Baan_view1b.[User],
dbo.Baan_view1b.[Date Submitted], dbo.Baan_view1b.category, dbo.Baan_view1b.stage
HAVING (NOT (dbo.Baan_view1b.stage LIKE 'Closed'))发布于 2010-10-28 01:22:25
是的,你可以做到。假设baan_view1b有所有的记录和注释,只有一些,更改
FROM dbo.Baan_view1b INNER JOIN dbo.notes可以这么说
FROM dbo.Baan_view1b LEFT OUTER JOIN dbo.notes内部联接(或简单的普通联接)告诉数据库引擎从Baan_view1b中获取记录,将它们与notes中的记录进行匹配,并在输出中为每对匹配的记录包括一行。如您所见,它从Baan_view1b中排除了在notes表中没有匹配项的记录。
相反,LEFT OUTER JOIN告诉引擎从Bann_view1b获取所有记录(因为它位于JOIN关键字的左侧)。然后,它会尽可能地匹配笔记中的记录。但是,无论是否可以匹配,您都可以保证在输出中为左侧表中的每一行分配一行。
如果像往常一样,从两个表中请求列值,则连接右侧的表中的列在缺少的行中将具有空值。
发布于 2010-10-28 01:14:02
您要查找的是左连接(左外连接),而不是内连接
SELECT dbo.Baan_view1b.Number, dbo.Baan_view1b.description, dbo.Baan_view1b.system, dbo.Baan_view1b.Analyst,
dbo.Baan_view1b.[User], dbo.Baan_view1b.[Date Submitted], dbo.Baan_view1b.category, dbo.Baan_view1b.stage,
MAX(dbo.notes.percent_developed) AS Expr1
FROM dbo.Baan_view1b
LEFT OUTER JOIN dbo.notes
ON dbo.Baan_view1b.Number = dbo.notes.note_number
WHERE NOT dbo.Baan_view1b.stage LIKE 'Closed'
GROUP BY dbo.Baan_view1b.Number, dbo.Baan_view1b.description, dbo.Baan_view1b.system, dbo.Baan_view1b.Analyst,
dbo.Baan_view1b.[User], dbo.Baan_view1b.[Date Submitted], dbo.Baan_view1b.category, dbo.Baan_view1b.stage 此外,将HAVING子句更改为WHERE子句可以提高查询效率。
发布于 2010-10-28 01:14:43
将inner join更改为left outer join。
(如果你觉得花哨,也可以买一部right outer join或full outer join。)
https://stackoverflow.com/questions/4035799
复制相似问题