我有一个名为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
...
显然,查询出了问题。我做错了什么?
答案 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;