如何显示where子句排除的值?

vc6uscn9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(269)

我正在尝试找出如何显示从where子句中排除的所有值,而不是由以下选项选择的值:

$pdo = $service->pdo;
    $sql = "SELECT a.id, a.name, a.surname, a.job, b.start_date, b.end_date
    FROM table1 a
    INNER JOIN table2 b on b.id = a.id
    WHERE a.job = '{$job}'
    AND
    STR_TO_DATE(b.`start_date`, '%d-%m-%Y') = '{$date}'
    GROUP BY a.id ";
    return $pdo->query($sql)->fetchAll(PDO::FETCH_OBJ);

这个查询返回的是首先匹配“工作标题”的值,然后是表2中该日期中存在的值。我要展示的是基于“工作标题”的所有其他值,不包括那个特定日期的值。基本上,我需要弄清楚,例如,如何知道谁是免费的,在一个特定的日期基于这个查询。
谢谢你的帮助

q8l4jmvw

q8l4jmvw1#

您可以修改查询并设置inverse where子句,如下所示,您将得到与“工作标题”不匹配的行或(这很重要)与表2中的日期重新查询不匹配的行:

$pdo = $service->pdo;
    $sql = "SELECT a.id, a.name, a.surname, a.job, b.start_date, b.end_date
    FROM table1 a
    INNER JOIN table2 b on b.id = a.id
    WHERE a.job <> '{$job}'
    OR
    STR_TO_DATE(b.`start_date`, '%d-%m-%Y') <> '{$date}'
    GROUP BY a.id ";
    return $pdo->query($sql)->fetchAll(PDO::FETCH_OBJ);

编辑
看完你的评论后,我发现你不明白´您不需要查询所指定的行,您需要与第一个查询匹配而与第二个查询不匹配的行。所以你需要这样:

$pdo = $service->pdo;
    $sql = "SELECT a.id, a.name, a.surname, a.job, b.start_date, b.end_date
    FROM table1 a
    INNER JOIN table2 b on b.id = a.id
    WHERE a.job = '{$job}'
    AND
    STR_TO_DATE(b.`start_date`, '%d-%m-%Y') <> '{$date}'
    GROUP BY a.id ";
    return $pdo->query($sql)->fetchAll(PDO::FETCH_OBJ);

相关问题