Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 如何从tableA中选择所有行,其中tableB中的两个相关列与tableA中的列相同_Sql_Sql Server 2005 - Fatal编程技术网

Sql 如何从tableA中选择所有行,其中tableB中的两个相关列与tableA中的列相同

Sql 如何从tableA中选择所有行,其中tableB中的两个相关列与tableA中的列相同,sql,sql-server-2005,Sql,Sql Server 2005,以下是表A和表B中的示例行: col1 col2 col3 123 | asdf | ddd 我打算尝试使用CTE来检索这个值,但我一次只能处理一列 这是我到目前为止所拥有的,但现在我被难住了 ;with cte as ( SELECT A.col1 ,A.col2 FROM tableA A ) select col1, col2 from cte where col1, col2 n

以下是表A和表B中的示例行:

 col1   col2    col3
123  |  asdf  |  ddd
我打算尝试使用CTE来检索这个值,但我一次只能处理一列

这是我到目前为止所拥有的,但现在我被难住了

    ;with cte as (
     SELECT  A.col1
          ,A.col2
      FROM tableA A
        )

    select col1, col2 from cte where col1, col2

    not in (select col1, col2 from FHU.dbo.HolidayCallers)

重申一下,我希望输出是顶部的原始样本行。

根据您的问题,您可以使用EXISTS查找两个表中相关列所在的行

SELECT a.ConversationID, a.SendDateUtc
    FROM tableA a
    WHERE EXISTS(SELECT NULL
                     FROM FHU.HolidayCallers hc
                     WHERE a.ConversationID = hc.ConversationID
                         AND a.SendDateUtc = hc.SendDateUtc);
但是,根据您提供的示例代码,您似乎在寻找一个不存在的条件:

SELECT a.ConversationID, a.SendDateUtc
    FROM tableA a
    WHERE NOT EXISTS(SELECT NULL
                         FROM FHU.HolidayCallers hc
                         WHERE a.ConversationID = hc.ConversationID
                             AND a.SendDateUtc = hc.SendDateUtc);

根据您的问题,您可以使用EXISTS查找两个表中相关列所在的行

SELECT a.ConversationID, a.SendDateUtc
    FROM tableA a
    WHERE EXISTS(SELECT NULL
                     FROM FHU.HolidayCallers hc
                     WHERE a.ConversationID = hc.ConversationID
                         AND a.SendDateUtc = hc.SendDateUtc);
但是,根据您提供的示例代码,您似乎在寻找一个不存在的条件:

SELECT a.ConversationID, a.SendDateUtc
    FROM tableA a
    WHERE NOT EXISTS(SELECT NULL
                         FROM FHU.HolidayCallers hc
                         WHERE a.ConversationID = hc.ConversationID
                             AND a.SendDateUtc = hc.SendDateUtc);

您可以使用
内部联接
查找两个表中的记录:

SELECT a.ConversationID, a.SendDateUtc
FROM tableA AS a
INNER JOIN FHU.dbo.HolicayCallers AS hc ON a.ConversationId = hc.ConversationId
   AND a.SendDateUtc = hc.SendDateUtc

您可以使用
内部联接
查找两个表中的记录:

SELECT a.ConversationID, a.SendDateUtc
FROM tableA AS a
INNER JOIN FHU.dbo.HolicayCallers AS hc ON a.ConversationId = hc.ConversationId
   AND a.SendDateUtc = hc.SendDateUtc

@列文——我也怀疑他不在,但不管怎样,我认为这是他想要的(正如我在后期的回复中所说的)+1+1-添加了一条关于使用
EXISTS
而不是
JOIN
的注释,你在我发布之前就添加了:)@Lieven-我也怀疑不在,但无论如何,我认为这是他想要的(正如我在后期的回复中发布的)+1+1-添加了一条关于使用
EXISTS
而不是
JOIN
的注释,您在我发布之前添加了它:)他想查找两个表中的记录,而
LEFT JOIN
是进行此类检查的最不有效的方法。@JNK OP中的示例代码并不表示他们正在查找匹配的记录,而是查找不在两个表中的记录。如果请求是为了匹配记录,
是否会存在
优于
连接
?首先,我认为很清楚:
这里有一个在表a和表B中都可以找到的示例行:
,然后在结尾处,我重申我希望输出是位于顶部的原始样本行。对于SS 2005+,
EXISTS
短路和
JOIN
将合并整个数据集,因此
EXISTS
通常更快。@JNK感谢您为我澄清EXISTS vs JOIN问题。他想查找两个表中的记录,而
LEFT JOIN
是进行此类检查的最不有效的方法。@JNK OP中的示例代码并不表示他们正在查找匹配的记录,而是查找不在两个表中的记录。如果请求是为了匹配记录,
是否会存在
优于
连接
?首先,我认为很清楚:
这里有一个在表a和表B中都可以找到的示例行:
,然后在结尾处,我重申我希望输出是位于顶部的原始样本行。对于SS 2005+,
EXISTS
短路和
JOIN
将合并整个数据集,因此
EXISTS
通常更快。@感谢JNK为我澄清了EXISTS vs JOIN问题。