Sql server SQL查询(如果存在)
我想检查另一个表中是否存在数据 我的桌子结构Sql server SQL查询(如果存在),sql-server,Sql Server,我想检查另一个表中是否存在数据 我的桌子结构 CREATE TABLE [dbo].[IndicatorData] ( [id] [bigint] IDENTITY(1,1) NOT NULL, [value] [float] NOT NULL, [indicatorId] [int] NOT NULL, [source] [nvarchar](500) NOT NULL, [uploaded] [bit] NOT NULL, [createdBy
CREATE TABLE [dbo].[IndicatorData]
(
[id] [bigint] IDENTITY(1,1) NOT NULL,
[value] [float] NOT NULL,
[indicatorId] [int] NOT NULL,
[source] [nvarchar](500) NOT NULL,
[uploaded] [bit] NOT NULL,
[createdBy] [nvarchar](500) NULL,
[createdOn] [datetime] NULL,
[lastModifiedBy] [nvarchar](500) NULL,
[lastModifiedOn] [datetime] NULL
)
表2
CREATE TABLE [dbo].[DataFields]
(
[dataId] [bigint] NOT NULL,
[fieldId] [int] NOT NULL
)
IndicatorData.id
与数据字段有关系。dataid
(IndicatorData.id
可以有多个数据字段组合)
表指示符数据样本数据:
表数据字段示例数据:
我尝试过的查询:
注意:我不会传递数据id,我只传递字段id和指示符id
情景#1
SELECT *
FROM IndicatorData a
INNER JOIN DataFields b ON a.id = b.dataid
WHERE a.indicatorid = 72
AND b.fieldid IN (59, 207)
当我传递字段id时,我需要获得值与数据id的组合
输出应返回如下所示:
请建议我如何做到这一点这对你有用吗
;with c as (
SELECT a.id, cnt = count(*) from IndicatorData a
INNER JOIN DataFields b ON a.id=b.dataid
where a.indicatorid = 72 and b.fieldid in(59,207)
group by a.id
having count(*) > 1
)
select a.*, b.* from IndicatorData a INNER JOIN DataFields b
ON a.id=b.dataid
inner join c
on a.id = c.id;
如果我正确理解要求,您可以如下所示:
SELECT * from
IndicatorData a INNER JOIN
DataFields b ON a.id=b.dataid
WHERE
a.indicatorid = 72 AND
a.id IN
(
SELECT df.id FROM DataFields df
WHERE df.fieldid IN (59,207)
GROUP BY df.dataId HAVING COUNT(1) > 1
)
您的查询在我看来很好-什么不起作用?您可以查看Scaneiro#1并比较输出。。您可以找到不同之处不太清楚您想要什么,您的意思是您只想要具有相同值和多条记录的id的输出吗?i、 e.在场景1输出中,id=69137的记录不是您想要的输出?抱歉..我已经编辑了帖子…请检查它并让我知道您的建议鉴于您显示的数据,我看不出您如何确定id=69137应该被排除-您是否只查找给定指示器同时具有字段id 59和207的情况?