我有表格:mainTable
,A
,B
和C
。
表C是A和B之间的关系表(n:n) - C =(A_ID,B_ID)。
我尝试了以下查询:
select * from mainTable
left join A on (mainTable.id=A.mainTableId)
left join C on (C.A_id = A.id)
left join B on (C.B_id = B.id)
where B.type=1;
这里的问题是,如果我只想从mainTable中获取所有B的行 产品是1型。 现在我从mainTable获取所有行,其中至少有一个B产品存在类型1。
答案 0 :(得分:1)
将WHERE
条件移至JOIN ON
条件以获得正确的外连接效果,如
select mt.* from mainTable mt
left join A on (mt.id=A.mainTableId)
left join C on (C.A_id = A.id)
left join B on (C.B_id = B.id) AND B.type=1;
答案 1 :(得分:1)
我已经插入一个左连接更多。这会计算此部分的所有产品以及type = 1的所有产品。因此,您可以在cnt.count = cnt.anz_type1的位置说明如果从类型1获取所有产品
select * from mainTable
left join A on (mainTable.id=A.mainTableId)
left join C on (C.A_id = A.id)
left join B on (C.B_id = B.id)
LEFT JOIN (
SELECT B.id ,
sum(IF(B.type=1,1,0)) anz_type1 ,
sum(1) total
FROM B GROUP BY id
) cnt ON C.B_id = cnt.id
where cnt.total = cnt.anz_type1;
答案 2 :(得分:0)
试试这个......
select * from mainTable
inner join A on (mainTable.id=A.mainTableId)
inner join C on (C.A_id = A.id)
inner join B on (C.B_id = B.id AND B.type=1);
这将为您提供所有来自维护的行,其中所有B产品都是类型1。