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

时间:2018-06-05 08:11:09

标签: mysql select group-by inner-join where

我正在试图弄清楚如何显示从WHERE子句中排除的所有值,而不是那些由以下选择的值:

class Post {
 String id,
 User user,
 List<Comments> comments
}

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

你可以修改你的查询并像这样设置inverse where子句,得到与'work title'不匹配的行OR(这很重要)与table2中的日期requeriment不匹配的行: / p>

    $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);