我有3张桌子
1- Dis
Oid || Name
2- CS
Oid || Name || Dis
3-暴击
Oid || CS || Date
我有一个查询,该查询为我提供了与当前月份和年份匹配的Dis和CS的名称:
SELECT Dis.Oid as 'DisOid', Dis.Name as 'Dis', CS.OID as 'CsOid' ,CS.Name as 'CS'
FROM Crit, CS, Dis
WHERE Crit.CS=CS.OID AND Dis.OID=CS.Dis
AND convert(datetime,CONCAT(YEAR(getdate()),'-',Month(getdate()),'-01 00:00:00')) = convert(datetime,CONCAT(YEAR(Crit.Date),'-',Month(Crit.Date),'-01 00:00:00'))
ORDER BY Dis.Oid DESC
我需要的是获取先前查询中不存在的Cs,我这样做了:
SELECT Dis.Oid as 'DisOid', Dis.Name as 'Dis', CS.OID as 'CsOid' ,CS.Name as 'CS'
FROM Crit, CS, Dis
WHERE NOT EXISTS (SELECT Crit.Oid
FROM Crit WHERE Crit.CS=CS.OID)
AND Dis.OID=CS.Dis
AND convert(datetime,CONCAT(YEAR(getdate()),'-',Month(getdate()),'-01 00:00:00')) = convert(datetime,CONCAT(YEAR(Crit.Date),'-',Month(Crit.Date),'-01 00:00:00'))
ORDER BY Dis.Oid DESC
但是它不能正常工作,它给了我CS重复的信息,我不确定是否给我提供了当前月份和年份不存在的CS的信息。
如何使其正常工作?我还没有完全了解'NOT EXISTS',我不知道那是否是我所需要的。
答案 0 :(得分:0)
需要将不存在更改为不存在的声音:
SELECT distinct Dis.Oid as 'DisOid', Dis.Name as 'Dis', CS.OID as 'CsOid' ,CS.Name as 'CS'
FROM Crit, CS, Dis
WHERE cs.name not in (select rest of query)
我无法复制其余子查询。
答案 1 :(得分:0)
这终于对我有用:
SELECT dis.oid AS 'DisOid',
dis.[name] AS 'Dis',
cs.oid AS 'CsOid',
cs.[name] AS 'CS'
FROM cs,
dis
WHERE dis.oid = cs.dis
AND cs.oid NOT IN (SELECT cs.oid
FROM crit,
cs,
dis
WHERE crit.cs = cs.oid
AND dis.oid = cs.dis
AND CONVERT(DATETIME, Concat(Year(Getdate()),
'-',
Month(
Getdate()),
'-01 00:00:00')
) = CONVERT(DATETIME, Concat(
Year(crit.date), '-',
Month(crit.date),
'-01 00:00:00')
))
我不知道这是否是理想的方法,但是它可以在合理的时间内完成工作。