MySQL:加入一个表,其中多行是条件的一部分

麦克风

尝试从有多个相关行的连接表中选择一些行。
这是原始查询的一个非常简化的版本,因此请不要对一般表结构提出建议。

表A

id, title
------------
1, housea
2, houseb
3, housec
4, housed

表B

id, cid, attrib, val
--------------------
1, 1, bathrooms, 2
2, 1, bedrooms, 1
3, 2, bathrooms, 0
4, 1, pools, 1
5, 2, bedrooms, 1
6, 2, pools, 1
7, 3, bathrooms, 1
8, 4, bathrooms, 1
9, 4, bedrooms, 1

选择至少有一间浴室和一间卧室的所有对象。

所以结果只有这两个应该出现:

2, housea
4, housed

这不起作用:

SELECT a.id, title
FROM tablea a
LEFT JOIN tableb b ON b.cid = a.id
WHERE (b.attrib = "bathrooms" AND b.val > 0) AND (b.attrib = "bedrooms" AND b.val > 0)

这也不是:

SELECT a.id, title
FROM tablea a
LEFT JOIN tableb b1 ON b1.cid = a.id AND (b1.attrib = "bathrooms" AND b1.val > 0) 
LEFT JOIN tableb b2 ON b2.cid = a.id AND (b2.attrib = "bedrooms" AND b2.val > 0) 

感谢您的建议!

戈登·利诺夫

你的第二个版本基本上是正确的,除了你想要内部连接:

SELECT a.id, a.title
FROM tablea a JOIN
     tableb b1
     ON b1.cid = a.id AND (b1.attrib = 'bathrooms' AND b1.val > 0) JOIN
     tableb b2
     ON b2.cid = a.id AND (b2.attrib = 'bedrooms' AND b2.val > 0) ;

您所有的过滤都在ON子句中,因此实际上没有过滤掉任何行。如果您查看来自b1或 的列,您会看到过滤b2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过一个环境变量作为命令的一部分

外键可以成为另一个表的组合主键的一部分吗?

保留数组的第一个元素作为序列的一部分

MySQL-验证结果的一部分是否在另一个表中

一个组件是2个angular模块声明的一部分

VSCode查找和替换-查找实例,其中搜索表达式的一部分与条件匹配,而一部分与条件不匹配

表“ a”有一个条目,但是不能从查询的这一部分中引用它

MySQL / PHP-选择一个表名,其中包含单词的一部分

Postgres:作为多行插入的一部分,从另一个表插入值?

如何使Automapper映射另一个表的一部分的属性

一个有重复项的列表(按顺序),其中一部分需要转移

如果满足条件,则将单元的一部分提取到另一个单元中

根据另一个索引列表删除列表的一部分

将QTableWidget的一部分复制到另一个

更新mysql表中值的一部分

如何从另一个线程锁定方法的一部分?

一对零或一对关系,其中FK是从属表上的组件PK的一部分

跳过一个文件,但仍然是存储库的一部分

如何加入数组的一部分

一个框架包含另一个框架或其中的一部分 SpriteKit swift iOS

MySQL选择其中列等于字符串的一部分

我需要合并 2 个查询,但需要对其中的一部分求和

创建一个布局,其中一部分是静态的,另一部分在 Native-Base 中滑动时可滚动

MySQL更新多行中1列的一部分

MySQL 查询返回所有组,其中 value 是组的一部分

if 条件作为 GIT 命令的一部分

将表 postgresql 的一部分移动到另一个数据库

MySQL - 将查询的一部分加入新查询?

我有一个嵌套列表,想使用列表理解提取其中的一部分