MYSQL如何选择同时具有另一个表的WHERE EXISTS条件和主表中的正常WHERE条件的数据?

时间:2012-04-08 22:13:12

标签: mysql

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

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

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

AND another_column_from_table1 > 10

但是sytax似乎没有效果。使用WHERE EXISTS ... AND条件进行查询的正确方法是什么?

2 个答案:

答案 0 :(得分: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
              )

这将显示列中的值;大概是,因为当你添加额外的过滤条件时结果集是空的,所以这个select的第二列中的值都将小于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;

如果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;

答案 1 :(得分:1)

你为什么不跑这个?

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

加入可能会减少反模式:)