1

如果表 2 中的 SubjectB 列与表 1 中的 Subject A 列匹配,则以下代码将获取数据。

SELECT
UID
FROM
Table1
WHERE EXISTS (
    SELECT 1
    FROM Table2
    WHERE SubjectB = SubjectA
)

我想在右括号后添加一个附加条件:

AND another_column_from_table1 > 10

但是该语法似乎无效。使用 WHERE EXISTS ... AND 条件进行查询的正确方法是什么?

4

2 回答 2

4

鉴于您的初始查询,您应该能够编写:

SELECT UID
  FROM Table1
 WHERE EXISTS (SELECT 1
                 FROM Table2
                WHERE SubjectB = SubjectA
              )
   AND another_column_from_table1 > 10;

简单地将条件添加到查询末尾不应该有语法错误。从评论来看,这似乎在语法上被接受,但不产生任何输出。调试它的明显技术是:

SELECT UID, another_column_from_table1
  FROM Table1
 WHERE EXISTS (SELECT 1
                 FROM Table2
                WHERE SubjectB = SubjectA
              )

这将显示列中的值;据推测,由于添加额外过滤条件时结果集为空,因此该选择的第二列中的值都将小于 10(或 null)。

如果 Table1 和 Table2 中的条目之间存在一对一的关系,那么您可以使用 JOIN 代替:

SELECT t1.UID
  FROM Table1 AS t1
  JOIN Table2 AS t2 ON t2.SubjectB = t1.SubjectA
 WHERE t1.another_column_from_table1 > 10;

如果 Table1 中的每一行在 Table2 中可能有几行,那么您需要添加 DISTINCT:

SELECT DISTINCT t1.UID
  FROM Table1 AS t1
  JOIN Table2 AS t2 ON t2.SubjectB = t1.SubjectA
 WHERE t1.another_column_from_table1 > 10;
于 2012-04-08T22:29:21.540 回答
1

你为什么不运行这个?

SELECT UID FROM Table1, Table2
WHERE SubjectB = SubjectA AND another_column_from_table1 > 10

可能加入会不那么反模式:)

于 2012-04-08T22:20:28.793 回答