有两张桌子:
A(`A_id`,`A_name`)
和
B(`B_id`,`A_id`,`B_kind`)
B_kind
列为ENUM('type 1','type 2')
。那么,我怎样才能获得表A
中包含B
但没有B_kind='type 1'
的条目的所有行B_kind='type 2'
。
php中的表示:
$A = array();
$B = array();
$sample = array();
foreach( $A as $key => $value )
{
if( find_type1($value,$B) && ! find_type2($value,$B) )
$sample[] = $A;
}
请帮助,我该怎么做?
答案 0 :(得分:4)
您可以使用exists
和not exists
:
select *
from A
where exists
(
select *
from B
where B.A_Id = A.A_Id
and B.B_kind = 'type 1'
)
and not exists
(
select *
from B
where B.A_Id = A.A_Id
and B.B_kind = 'type 2'
)
答案 1 :(得分:1)
SELECT *
FROM A
JOIN B ON (A.A_id = B.A_id AND B.B_kind = 'type 1')
答案 2 :(得分:1)
我认为你想从A中排除A中的行,其中A类型为'type 2',A_id为'type 1'在B?
SELECT A.*
FROM A
INNER JOIN B as B1 ON (B1.A_id = A.A_id AND B1.B_kind = 'type 1')
LEFT JOIN B as B2 ON (B2.A_id = A.A_id AND B2.B_kind = 'type 2')
WHERE B2.A_id IS NULL
WHERE子句中的“IS NULL”确保只包含与“LEFT JOIN”不匹配的行。