我有一个查询,我正在查看三个不同的表,为了这篇文章的目的,我只需要看到三列; RecordID,FieldType和Tranid。记录ID可以有多个Field类型,每个字段类型都有一个不同的tranid。
如果任何字段类型='CO'
,我想要做的就是获取所有数据集 SELECT
Header.RecordID,
Detail.FieldType,
Header.TranID
FROM Header
INNER JOIN (select * from Detail where fieldtype = 'CO') as Detail
ON Header.RecordID = Detail.RecordID
INNER JOIN TranDef ON Header.TranID = TranDef.TranID
WHERE
(Header.CalendarDate BETWEEN GETDATE() - 10 AND GETDATE())
但这不起作用。我只返回一行数据,正如我所说,我想要记录的所有数据,而不仅仅是一行。我在这里做错了什么?
答案 0 :(得分:3)
您的查询不起作用,因为它将从Detail
选择的行限制为fieldtype = 'CO'
,以及内部联接。
看起来您正在寻找WHERE EXISTS
查询:
SELECT
h.RecordID,
d.FieldType,
h.TranID
FROM
Branch b
INNER JOIN
Header h ON b.BranchID = h.BranchID
INNER JOIN
Detail d ON h.RecordID = d.RecordID
WHERE (h.CalendarDate BETWEEN GETDATE() - 10 AND GETDATE())
AND EXISTS (
SELECT *
FROM Detail dd
WHERE dd.RecordID = h.RecordID AND dd.fieldtype = 'CO'
)
想法是加入所有Detail
条记录,然后根据链接到相应{'CO'
行的Detail
条记录中是否存在Header
条记录来过滤结果1}}行。
答案 1 :(得分:0)
您可以尝试在WHERE标准中包含以下内容:
SELECT RecordID, FieldType, TranID
FROM Branch br, Header hr, Region rgn
WHERE br.FieldType = 'CO' and
hr.FieldType = 'CO' and
rgn.FieldType = 'CO'
答案 2 :(得分:0)
我觉得你让它变得比它应该更复杂。也许尝试以下?我知道我过去做过类似的事情。
SELECT
h.RecordID,
d.FieldType,
h.TranID
FROM Header as h
INNER JOIN Branch as b on b.BranchID = h.BranchID
INNER JOIN Detail as d on d.RecordID = h.RecordID
WHERE
(h.CalendarDate BETWEEN GETDATE() - 10 AND GETDATE())
and d.fieldtype = 'CO'