SQL 子查询逻辑混乱

SQL subquery logic confusion

我正在写一个 SQL 查询,但我卡在了某个点上,不知道如何解决这个问题。首先看看下面的查询:

SELECT user_id, COUNT(*) as count 
FROM hwc_attend 
WHERE at_id IN 
    (SELECT evdet_id
     FROM eve_detail
     WHERE evdet_id IN (SELECT at_id FROM hwc_attend WHERE attendstate=1 )
       AND location <> ''
       AND evdet_id > 999
       AND location NOT IN (SELECT ASIN FROM pReviews )
    )
GROUP BY user_id

此查询工作正常,但给出的结果比要求的要少,因为 SELECT ASIN FROM pReviews 部分应该类似于 SELECT ASIN FROM pReviews where cID={place current value of "location" field from table eve_detail here.

为了更好地理解,这里是错误的查询:

SELECT user_id, COUNT(*) as count 
FROM hwc_attend 
WHERE at_id IN 
    (SELECT evdet_id **, location**
     FROM eve_detail
     WHERE evdet_id IN (SELECT at_id FROM hwc_attend WHERE attendstate=1)
       AND location <> ''
       AND evdet_id > 999
       AND location NOT IN (SELECT ASIN FROM pReviews where cID=**location**)
    )
GROUP BY user_id

很难解释..简而言之,我必须从 table "eve_detail" 中获取的结果中删除 "location" 值,这些值也存在于 table "pReviews" 在 cID 列中。

此外,如果有人可以将其转换为连接,那就太好了。我需要两个查询来学习。

将其转换为连接会使用类似这样的方法。使用 LEFT OUTER JOIN 并检查 NULL 而不是 NOT IN。我假设 hwc_attend 有一个名为 id 的唯一列,用于计数以获取不同的行。

SELECT ha1.user_id, COUNT(DISTINCT ha1.id) as count 
FROM hwc_attend ha1
INNER JOIN eve_detail ed ON ha1.at_id = ed.evdet_id
INNER JOIN hwc_attend ha2 ON ed.evdet_id = ha2.at_id 
LEFT OUTER JOIN pReviews pr ON ed.location = pr.ASIN AND cID = **location**
WHERE ha2.attendstate = 1
AND ed.location <> ''
AND ed.evdet_id > 999
AND pr.ASIN IS NULL
GROUP BY ha1.user_id

改变

AND location NOT IN (SELECT ASIN FROM pReviews )

AND NOT EXISTS (SELECT ASIN FROM pReviews WHERE eve_detail.location = ASIN.cID )