php - Mysql多选排除行

标签 php sql mysql

有 2 个表:

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='类型 2'.

在 php 中的表示:

$A = array();
$B = array();
$sample = array();
foreach( $A as $key => $value )
{
    if( find_type1($value,$B) && ! find_type2($value,$B) )
    $sample[] = $A;
}

请帮忙,我该怎么做?

最佳答案

您可以使用existsnot 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'
        )

关于php - Mysql多选排除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685794/

相关文章:

mysql - MYSQL查询中的多重计数

php - php中的变量下拉菜单

Php sql 查询工作正常但是因为我在同一个连接中使用两个条件不工作

PHP Laravel 按月和年从数据库中提取数据

mysql - BigQuery - 根据匹配值或时间戳合并三个表

php - Mysql 更新查询,如果值没有改变怎么办?我该如何检查?

java - 每当我运行 "apt-get install php5-gd php-mysql"时,它都会在 Ubuntu 14.04 上显示 "Unable to locate package php-mysql"

javascript - 仅验证可见字段

mysql - 使用 JOIN 删除行

mysql - 获取主表中每行的每个连接表的行数