使用 returns 两个值的子查询时违反基数
Cardinality violation when using a subquery that returns two values
我已经创建了一个 sql 查询草图是这样的
select *
from A
where A.id in (select B.id1, B.id2 from B);
其中主要 select returns 那些 A.id 与 B.id1 或 B.id2 一致的值。
显然此解决方案不起作用,因为基数在 where 子句中不匹配。我该如何克服这个问题?
一个解决方案是创建两个子查询,一个用于 B.id1,一个用于 B.id2,但由于我的子查询比本例中的要长得多,所以我正在寻找更优雅的解决方案。
我正在使用 Mysql
编辑 1
只要语法比使用两个子查询更简单,我就可以使用 joins
编辑 2
感谢@NullSoulException。我尝试了第一个解决方案并按预期工作!!
像下面这样的东西应该可以解决问题。
select *
From table1 a , (select id1 , id2 from table2 ) b
where (a.id = b.id1) or (a.id = b.id2)
或者您可以通过给加入的 table 一个别名来使用相同的 table 加入两次。
select * from table1 a
INNER JOIN table2 b1 on a.id = b1.id1
INNER JOIN table2 b2 on a.id = b2.id2
请根据您的 datasets/tables..
测试以上内容
我已经创建了一个 sql 查询草图是这样的
select *
from A
where A.id in (select B.id1, B.id2 from B);
其中主要 select returns 那些 A.id 与 B.id1 或 B.id2 一致的值。
显然此解决方案不起作用,因为基数在 where 子句中不匹配。我该如何克服这个问题?
一个解决方案是创建两个子查询,一个用于 B.id1,一个用于 B.id2,但由于我的子查询比本例中的要长得多,所以我正在寻找更优雅的解决方案。
我正在使用 Mysql
编辑 1 只要语法比使用两个子查询更简单,我就可以使用 joins
编辑 2 感谢@NullSoulException。我尝试了第一个解决方案并按预期工作!!
像下面这样的东西应该可以解决问题。
select *
From table1 a , (select id1 , id2 from table2 ) b
where (a.id = b.id1) or (a.id = b.id2)
或者您可以通过给加入的 table 一个别名来使用相同的 table 加入两次。
select * from table1 a
INNER JOIN table2 b1 on a.id = b1.id1
INNER JOIN table2 b2 on a.id = b2.id2
请根据您的 datasets/tables..
测试以上内容