1

我有 3 张桌子DocumentsSRevents

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 详细信息应显示其他事件。目前只有两种类型的文件。

我的选择查询应该是什么?

4

4 回答 4

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
于 2013-04-20T08:45:12.940 回答
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)
于 2013-04-20T08:45:31.550 回答
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

要进一步了解有关联接的更多信息,请访问以下链接:

上面查询的更安全版本假设相同的 ID 可以包含 onSREventstable 将通过使用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
于 2013-04-20T08:36:59.967 回答
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
于 2013-04-20T09:17:09.173 回答