首页 > 解决方案 > 带有两个单独表的 Mysql NOT EXISTS 似乎无法按预期工作

问题描述

我正在尝试为每个case_type处理每个的数据statecity并且court_complex,为了实现这一点,我创建了一个名为的表case_pointer,用于保存上述各项的组合。除了case_pointer显示已处理案件之外,我还创建了一个名为的表skippers,其中包含 state_id、city_id、court_complex 和 case_type id。船长需要从最终指针表中排除 state、city 或 court_complex。

到目前为止,这是我的查询,但它的工作方式相反。它显示存在于skippers中的记录,而不是排除它们。

SELECT cp.id    AS case_pointerID, 
       ct.id    AS caseTypeID, 
       ct.ct_id AS casetypeCode, 
       ct.cc_id AS cc_id, 
       ct.name  AS caseTypeName, 
       co.wid   AS complexCode, 
       co.id    AS complex_id, 
       co.name  AS courtName, 
       ci.id    AS city_id, 
       ci.wid   AS cityCode, 
       ci.name  AS cityName, 
       st.id    AS state_id, 
       st.name  AS stateName, 
       st.wid   AS stateCode 
FROM   case_types ct 
       LEFT JOIN court_complex co 
              ON ct.cc_id = co.id 
       LEFT JOIN city ci 
              ON co.city_id = ci.id 
       LEFT JOIN state st 
              ON ci.state_id = st.id 
       LEFT JOIN case_pointer cp 
              ON ct.id = cp.casetypeid 
WHERE NOT EXISTS  
        (SELECT 1 
        FROM case_pointer cp 
        WHERE EXISTS (SELECT null 
                      FROM skippers sk 
                      WHERE sk.state_id = cp.state_id)
         ) 
       OR cp.id IS NULL 
       ORDER BY st.id ASC, ct.id ASC, co.id ASC
       LIMIT 5

如果我做错了什么,请告诉我。

标签: mysqlsqlsubqueryleft-join

解决方案


您的NOT EXISTS子查询似乎与主查询没有任何联系(别名“cp”使用了两次),因此无效。

此外,括号上看起来有些错误。


推荐阅读