尝试这样做时,从有多个相关行的联接表中选择一些行。
这是原始查询的一个非常简化的版本,因此请不要对一般的表结构提出建议。
表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)
谢谢你的建议!