我有3个表,Documents
,SR
和events
在documents
我正在保存与SR和事件相关的所有文档。
我想在一个页面中显示所有文档。
所以我正在使用这个选择查询
Select *
from documents d, SR s, Events e
where d.relationid = ( case d.documenttype when 'SR' the s.SRId else 'e.eventid end)
但它不起作用。
我的document
表格结构如下:
documentid int,
documenttype nvarchar(50),
relationid int,
document image,
docdate date
任何人都可以指出我的错误吗?
我想选择所有包含相关信息的文件。表示其SR文档是否比SR详细信息应显示其他事件。现在只有两种类型的文件。
我的选择查询应该是什么?
答案 0 :(得分:0)
您可以使用LEFT JOIN
,
SELECT d.*,
COALESCE(s.Col1, e.Col1) AS Col1,
COALESCE(s.Col2, e.Col2) AS Col2,
COALESCE(s.Col3, e.Col3) AS Col3,
COALESCE(s.Col4, e.Col4) AS Col4
FROM documents d
LEFT JOIN SR s
ON d.relationID = d.SRID
LEFT JOIN Events e
ON d.relationID = e.eventID
其中Col1,...., Col4
是您要根据documenttype
显示的每个表格的列。
要进一步了解联接,请访问以下链接:
以上查询的更安全版本假设SR
和Events
表中的相同ID可以使用CASE()
SELECT d.*,
CASE WHEN d.documenttype = 'SR' THEN s.Col1 ELSE e.Col1 END) AS Col1,
CASE WHEN d.documenttype = 'SR' THEN s.Col2 ELSE e.Col2 END) AS Col2,
CASE WHEN d.documenttype = 'SR' THEN s.Col3 ELSE e.Col3 END) AS Col3,
CASE WHEN d.documenttype = 'SR' THEN s.Col4 ELSE e.Col4 END) AS Col4
FROM documents d
LEFT JOIN SR s
ON d.relationID = d.SRID
LEFT JOIN Events e
ON d.relationID = e.eventID
答案 1 :(得分:0)
沿着这些方向的东西
SELECT
CASE WHEN SR.DocumentType = 'SR' THEN s.SRid ELSE e.eventId END AS Id
FROM documents d
LEFT JOIN SR s
ON s.SRId = d.relationId
LEFT JOIN Events e
ON e.EventId = d.relationId
答案 2 :(得分:0)
这应该有用。
Select *
from documents d
left join SR s on d.relationid = d.SRId
left join Events e on d.relationid = e.eventid
where d.relationid = ( case when d.documenttype = 'SR' then s.SRId else e.eventid end)
答案 3 :(得分:0)
您无需编写Where子句,因为您需要所有记录
查询下面肯定是
Select DocumentID,
DocumentType,
RelationID,
case when DocumentType = 'SR' then S.SRID else E.EventID end as Doc_DataID
From
Documents D
Left outer join SR S on D.RelationID = S.SRID
LEFT OUTER JOIN EVENTS E on E.EventiD = D.RelationID