Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql带排除行的多选_Php_Sql_Mysql - Fatal编程技术网

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