假设我在名为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 |
---------------------
这是解决这个问题的正确方法还是有更好的方法?
答案 0 :(得分:2)
如果要查找与多个条件不匹配的内容,请将它们括在括号中并使用NOT
SELECT * FROM `names_and_dates` WHERE NOT (`name` = 'John' AND `date` = '2015-01-01');