MySQL在多个同时条件下过滤

时间:2015-07-02 23:45:49

标签: mysql

假设我在名为names_and_dates的表格中有以下数据:

---------------------
| name | date       |
| John | 2015-01-01 |
| John | 2015-07-02 |
| Mary | 2015-01-01 |
| Mary | 2015-07-02 |
---------------------

如何查询任何非John名称且同时没有日期2015-01-01的数据?通常我会想到一个类似的查询:

SELECT * FROM `names_and_dates` WHERE `name` != 'John' AND `date` != '2015-01-01';

但是这只会在2015-07-02返回一行Mary,而实际上我想返回两行同时不匹配的3行。这引出了我的查询:

SELECT * FROM `names_and_dates` WHERE CONCAT(`name`,`date`) != CONCAT('John','2015-01-01');

哪会返回预期数据:

---------------------
| name | date       |
| John | 2015-07-02 |
| Mary | 2015-01-01 |
| Mary | 2015-07-02 |
---------------------

这是解决这个问题的正确方法还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

如果要查找与多个条件不匹配的内容,请将它们括在括号中并使用NOT

SELECT * FROM `names_and_dates` WHERE NOT (`name` = 'John' AND `date` = '2015-01-01');