Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 除了一些项目外,如何选择所有项目?_Sql_Tsql - Fatal编程技术网

Sql 除了一些项目外,如何选择所有项目?

Sql 除了一些项目外,如何选择所有项目?,sql,tsql,Sql,Tsql,我有四张桌子 第一个表中的每个项目都通过第二个和第三个表链接到最后一个表中的一些项目 这是: 我使用以下代码选择所有适当的项目(我是指上表中的黑色项目): SELECT DISTINCT a1.Name, a2.Name, st.Name, st.ID FROM Agents a1 INNER JOIN Agents a2 ON a1.Owner = 1 AND a1.ID = a2.AgentID INNER JOIN AgentGTP ag ON ag.AgentID = a2.ID

我有四张桌子

第一个表中的每个项目都通过第二个和第三个表链接到最后一个表中的一些项目

这是:

我使用以下代码选择所有适当的项目(我是指上表中的黑色项目):

SELECT DISTINCT a1.Name, a2.Name, st.Name, st.ID
FROM Agents a1
INNER JOIN Agents   a2 ON a1.Owner = 1 AND a1.ID = a2.AgentID
INNER JOIN AgentGTP ag ON ag.AgentID = a2.ID 
INNER JOIN GTP         ON GTP.ID = ag.GTPID
INNER JOIN Stations st ON st.ID = GTP.StationID

我需要选择最后一张表中的所有灰色项目。 我该怎么做?

我想就是这样:

SELECT * FROM Stations S
WHERE
    S.ID NOT IN
(
    SELECT DISTINCT st.ID
    FROM Agents a1
    INNER JOIN Agents   a2 ON a1.Owner = 1 AND a1.ID = a2.AgentID
    INNER JOIN AgentGTP ag ON ag.AgentID = a2.ID 
    INNER JOIN GTP         ON GTP.ID = ag.GTPID
    INNER JOIN Stations st ON st.ID = GTP.StationID
)

我很难在没有数据的情况下验证这一点,但这可能有效

SELECT st.*
FROM Agents a1
JOIN Agents   a2 ON a1.Owner = 1 AND a1.ID = a2.AgentID
JOIN AgentGTP ag ON ag.AgentID = a2.ID 
JOIN GTP         ON GTP.ID = ag.GTPID
RIGHT 
JOIN Stations st ON st.ID = GTP.StationID
WHERE GTP.ID IS NULL

这有帮助!但也许它可以在一个查询中完成?我的意思是只使用一个“选择”是的,它是完美的,正是我需要的,谢谢!但是,请您解释一下“RIGHT JOIN”和“WHERE GTP.ID为NULL”在这里到底做了什么?在这种情况下,Stations是“RIGHT”表-这意味着无论“left”表(GTP)中是否有匹配的行,都会返回所有行。所以,在GTP中没有匹配记录的地方,GTP中的所有字段都将显示为NULL。也许这能更好地解释它;这有点复杂,但可以理解。谢谢你的帮助!