Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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,这可能很简单,但我发现很难理解这一点 基本上,我有两张桌子,a和b“b”包含所有可能项目的列表,“a”包含链接到“b”中项目的行,以及父编号。i、 e,要显示a中的行及其信息,我执行以下操作: select a.field1, a.field2, b.description from a inner join b on a.itemid = b.itemid where a.parentnumber = @parentnumber 这类事情很管用。但我还希望有一个下拉框来显示所有未在a中为该父

这可能很简单,但我发现很难理解这一点

基本上,我有两张桌子,a和b“b”包含所有可能项目的列表,“a”包含链接到“b”中项目的行,以及父编号。i、 e,要显示a中的行及其信息,我执行以下操作:

select a.field1, a.field2, b.description
from a inner join b on a.itemid = b.itemid
where a.parentnumber = @parentnumber

这类事情很管用。但我还希望有一个下拉框来显示所有未在a中为该父帐户列出的项目。如何执行此操作?

通过使用此子查询的左连接,您可以提供一个别名并使用此别名执行空检查。我更喜欢这种方法,因为包含子查询结果的别名可以在整个查询中使用

SELECT  *
FROM    b
WHERE   itemid NOT IN
        (
        SELECT  itemid
        FROM    a
        WHERE   a.parentnumber = @parentnumber
        )
SELECT *
FROM b

LEFT JOIN
(
SELECT itemid
FROM   a
Where  a.parentnumber = @parentnumber
) As Sub On b.itemid = sub.itemid

WHERE sub.itemid IS NULL

它应该只返回那些未列出的?是的,只返回那些不在该父编号的a中的。