如果表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条件进行查询的正确方法是什么?
答案 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
加入可能会减少反模式:)