2015-06-17 101 views
1

我有一個名爲lis_pendens的表和一個名爲docket_entries的表。每個lis_pendens記錄都有很多docket_entries,其中docket_entries的外鍵是case_id。如果docket_entries的描述字段包含文本'writ'或'title'或'sale'或'dismissal',那麼我不想在結果集中返回關聯的lis_penden記錄。否則,如果屬於lis_pendnes記錄的docket_entries都不包含這些關鍵字,那麼我想返回結果集中的lis_pendens記錄。mysql正則表達式不返回正確的結果

這裏是我創建的查詢:我想查詢是好的

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

有什麼'description'列的數據類型?我猜這是一個blob類型,因爲二進制數據不匹配字符數據,除非八位字節是相同的,而'LOWER()'不理解如何操作沒有字符集的數據(因爲blob不' T)。嘗試使用AND CAST(e.description AS CHAR)REGEXP'令牌|銷售|解僱'......這可能會訣竅。 –

回答

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; 
相關問題