SQL数据库问题
关于SQL视图的问题。尝试从两个表开发视图。这两个表有相同的主键,第一个表有全部主键,第二个表有一些主键,但不是全部主键。当我内部连接它们时,我会得到一个记录集,但它并不完整,因为第二个表中没有所有的记录。在我看来,有没有一种方法可以编写逻辑,说明如果表#2中没有键,那么可以插入一个零,这样整个记录集都会显示在视图中?我想显示视图中的所有记录,即使没有要连接的内容 我的例子如下:SQL数据库问题,sql,view,Sql,View,关于SQL视图的问题。尝试从两个表开发视图。这两个表有相同的主键,第一个表有全部主键,第二个表有一些主键,但不是全部主键。当我内部连接它们时,我会得到一个记录集,但它并不完整,因为第二个表中没有所有的记录。在我看来,有没有一种方法可以编写逻辑,说明如果表#2中没有键,那么可以插入一个零,这样整个记录集都会显示在视图中?我想显示视图中的所有记录,即使没有要连接的内容 我的例子如下: SELECT dbo.Baan_view1b.Number, dbo.Baan_view1b.descrip
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'))
您要查找的是左连接(左外部连接),而不是内部连接
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子句可以提高查询效率。将
内部联接更改为左侧外部联接
(或右外部联接
或完全外部联接
,如果您愿意)。您需要外部联接。这将显示所有具有匹配密钥的记录以及不具有匹配密钥的记录。内部联接仅显示具有匹配联接键的记录
享受吧 你需要做一个左外连接,正如其他海报已经提到的那样。可以找到更多信息 是的,你可以这样做。假设baan_view1b拥有所有记录,而notes只有一些更改
FROM dbo.Baan_view1b INNER JOIN dbo.notes
说
FROM dbo.Baan_view1b LEFT OUTER JOIN dbo.notes
内部连接(或简单连接)告诉数据库引擎从Baan_view1b中获取记录,将它们与notes中的记录匹配,并在输出中为每对匹配的记录包含一行。如您所见,它排除了Baan_view1b中notes表中不匹配的记录
左外部联接则告诉引擎从Bann_view1b获取所有记录(因为它位于联接关键字的左侧)。然后,它将尽可能匹配notes中的记录。但是,不管是否可以匹配,都可以保证左侧表中每一行的输出中都有一行
如果像往常一样,您要求两个表中的列值,则联接右侧表中的列将在缺少的行中具有空值。感谢您的解释。我做到了,效果很好!谢谢你们所做的一切!