mysql正则表达式没有返回正确的结果

时间:2015-06-17 03:22:39

标签: mysql

我有一个名为lis_pendens的表和一个名为docket_entries的表。每个lis_pendens记录都有许多docket_entries,其中docket_entries的外键是case_id。如果docket_entries的description字段包含文本'writ'或'title'或'sale'或'dismissal',那么我不想在结果集中返回关联的lis_penden记录。否则,如果属于lis_pendnes记录的docket_entries都不包含这些关键字,那么我想在结果集中返回lis_pendens记录。

这是我创建的查询:

SELECT lis_pendens.id as id
FROM lis_pendens
INNER JOIN docket_entries
ON docket_entries.case_id = lis_pendens.id
WHERE no_foreclosure_sale_created_at IS NULL
AND NOT EXISTS (
  SELECT 1 FROM docket_entries AS e
  WHERE e.case_id = lis_pendens.id
  AND LOWER(e.description) REGEXP 'writ|title|sale|dismissal'
) GROUP BY id    

我认为查询很好但是它在数据库中生成了每个lis_pendens记录,即使其中一些lis_pendens记录关联了docket_entries,其描述字段包含:

Notice of Voluntary Dismissal
Notice of Dismissal & Discharge of Lis Pendens
Certificate of Title
...

显然,查询出了问题。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用MAX()执行分组式NAND操作:

SELECT p.id
FROM lis_pendens p
INNER JOIN docket_entries e ON e.case_id = p.id
GROUP BY p.id
HAVING MAX(LOWER(e.description) REGEXP 'writ|title|sale|dismissal') = 0;