Php Mysql带排除行的多选
有两个表:Php Mysql带排除行的多选,php,sql,mysql,Php,Sql,Mysql,有两个表: A(`A_id`,`A_name`) 及 B_kind列是枚举'type 1','type 2'。那么,如何才能获得表B中有一个条目的所有行A,该条目有一个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) &&am
A(`A_id`,`A_name`)
及
B_kind列是枚举'type 1','type 2'。那么,如何才能获得表B中有一个条目的所有行A,该条目有一个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;
}
请帮帮我,我该怎么做?您可以使用exists和not exists:
您可以使用exists和not exists:
我想您想排除A中A\u id为'Type2'和B中A\u id为'Type1'的行吗
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”不匹配的行。我认为您想从A中排除A\u id为“type 2”和B中A\u id为“type 1”的行吗
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”不匹配的行。without是指A中没有B_kind='type 2'行的行,还是指A中有B_kind='type 1'行,而不管是否有B_kind='type 2'?这些是不同的查询。不带是指A中没有B_kind='type 2'的行,还是指A中有B_kind='type 1'的行,而不管是否有B_kind='type 2'?这些是不同的查询。这不是他问的。你没有排除类型为2的行。这不是他问的。你没有排除类型为2的行。非常有趣的解决方案=非常有趣的解决方案=
SELECT *
FROM A
JOIN B ON (A.A_id = B.A_id AND B.B_kind = 'type 1')
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