mysql - 使用返回两个值的子查询时违反基数

标签 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。我尝试了第一个解决方案并按预期工作!!

最佳答案

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

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

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

关于mysql - 使用返回两个值的子查询时违反基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35608920/

相关文章:

php - 当 MySQL 中出现重复条目​​时重定向到自定义错误页面

neo4j - 密码关系基数

database - 试图理解实体关系图中的基数?

php - Laravel 更新并选择

mysql - 将 Foxpro 代码转换为基于集合的 MySQL 查询

mysql - LEFT JOIN 显示 NULL 行 + WHERE

mysql - 从子查询中选择列

owl - 最小基数在 Protege 中未按预期工作

php - 删除用户 > 还需要删除他们的项目,然后删除该项目的事件吗?

php - 查看最新版本的删除历史记录