棘手的SQLite查询,可能需要一些帮助

棘手的SQLite查询,可能需要一些帮助,sql,sqlite,join,inner-join,Sql,Sqlite,Join,Inner Join,我有一个相当混乱的SQLite查询,我似乎无法完全理解它 我有以下四个表格: 表“S” 表“T” 表“S2TMap” 表“温度” 我需要的是,如果temp.NewID表中不存在sID,则能够获取指定“t”中存在的MAX()sNum 例如,给定T'000,'000'将S'aaa aaa'、'bbb bbb'、'fff fff'和'ggg ggg'映射到它。然而,“fff fff”和“ggg ggg”都存在于临时表中,这意味着我只需要查看“aaa aaa”和“bbb bbb”。因此,语句将返回“2”

我有一个相当混乱的SQLite查询,我似乎无法完全理解它

我有以下四个表格:

表“S” 表“T” 表“S2TMap” 表“温度” 我需要的是,如果temp.NewID表中不存在sID,则能够获取指定“t”中存在的MAX()sNum

例如,给定T'000,'000'将S'aaa aaa'、'bbb bbb'、'fff fff'和'ggg ggg'映射到它。然而,“fff fff”和“ggg ggg”都存在于临时表中,这意味着我只需要查看“aaa aaa”和“bbb bbb”。因此,语句将返回“2”


我该怎么做呢

我一直在想下面的方法来选择“临时”表中不存在的s,但我不确定如何获得最大的座位,并且只基于特定的“不”

SELECT s.sID, s.sNum FROM s WHERE NOT EXISTS ( SELECT newID from temp where tmp.newID = s.sID)

谢谢

您很接近,您只需在S2TMap上加入,然后加入到T,以便将结果集限制为给定的T

SELECT MAX(s.sNum)
FROM s
    INNER JOIN S2TMap m on m.sID = s.sID
    INNER JOIN t on t.tID = m.tID
WHERE t.tID = '000'
    AND NOT EXISTS (
        SELECT newID FROM temp WHERE temp.newID = s.sID
    )

很接近,您只需在S2TMap上加入,然后加入到T,以便将结果集限制为给定的T

SELECT MAX(s.sNum)
FROM s
    INNER JOIN S2TMap m on m.sID = s.sID
    INNER JOIN t on t.tID = m.tID
WHERE t.tID = '000'
    AND NOT EXISTS (
        SELECT newID FROM temp WHERE temp.newID = s.sID
    )

以下查询应为您提供Ts及其最大SNUM的列表(只要在S和S2TMap中都存在):


以下查询应为您提供Ts及其最大SNUM的列表(只要在S和S2TMap中都存在):

尝试一下:

select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and not exists (
  select * from temp
  where temp.newId = st.sId)
这是可以玩的游戏

另一种可能效率较低的选择是:

select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and st.sId not in (
  select newId from temp)
尝试一下:

select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and not exists (
  select * from temp
  where temp.newId = st.sId)
这是可以玩的游戏

另一种可能效率较低的选择是:

select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and st.sId not in (
  select newId from temp)
select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and not exists (
  select * from temp
  where temp.newId = st.sId)
select max(s.sNum) result from s2tmap st
join s on st.sId = s.sId
where st.tId = '000' and st.sId not in (
  select newId from temp)