使用返回两个值的子查询时,基数违规

时间:2016-02-24 17:24:39

标签: mysql subquery cardinality

我创建了一个sql查询,草图就像这样

select *
from   A
where  A.id in (select  B.id1, B.id2 from B);

其中主选择返回A.id与B.id1或B.id2重合的值。

显然,这个解决方案并不起作用,因为基数在where子句中并不匹配。我怎样才能克服这个问题?

一个解决方案是制作两个子查询,一个用于B.id1,另一个用于B.id2,但由于我的子查询比这个例子长得多,所以我正在寻找更优雅的解决方案。

我正在使用Mysql

编辑1 只要语法比使用两个子查询更简单,我就没有使用连接的问题

编辑2 谢谢@NullSoulException。我尝试了第一个解决方案并按预期工作!!

1 个答案:

答案 0 :(得分:1)

像下面这样的东西应该可以解决问题。

select * 
From table1 a , (select id1 , id2 from table2 ) b 
where (a.id = b.id1) or  (a.id = b.id2)

或者您可以通过为连接表提供别名来连接同一个表两次。

select * from table1 a 
INNER JOIN table2 b1 on a.id = b1.id1
INNER JOIN table2 b2 on a.id = b2.id2

请针对您的数据集/表格测试上述内容。