我遇到查询问题:
SELECT l.LookupID, l.companyID, c.companyID, c.companyname, l.selectionID
FROM companies c
INNER JOIN lookup l
ON c.companyID = l.companyID AND c.companyID = 1 AND c.companyID = 2
WHERE l.selectionID = 2 AND l.selectionID = 2
GROUP BY l.LookupID
显然AND
没有返回预期的结果。我期待的结果是selectionID
2和4必须存在于companyID
1和2中。
我在考虑使用Count(*)
,但我很困惑。
答案 0 :(得分:0)
c
中的行绝对为零,此条件为TRUE。 (如果其中一个条件为真,则另一个条件保证为假。)
c.companyID = 1 AND c.companyID = 2
如果没有示例数据样本和预期结果,则说明不明确。有几种解释。这些解释可能在很大程度上有所不同。这意味着对问题的任何回答都只是一个猜测"。
以下是从company
返回行的示例,其中lookup
2和4的selectionID
中有匹配的行。
SELECT c.companyID
, c.companyname
FROM companies c
JOIN ( SELECT l.companyID
FROM lookup l
WHERE l.companyID IN (1,2)
AND l.selectionID IN (2,4)
GROUP BY l.companyID
HAVING COUNT(DISTINCT l.selectionID) = 2
) d
ON d.companyID = c.companyID
ORDER BY c.companyID
这只是我们如何返回特定结果的一个例子。同样,如果没有更明确的规范(示例数据,预期输出),我们只是在猜测。
还有其他查询模式将返回等效结果。例如
SELECT c.companyID
, c.companyname
FROM companies c
WHERE c.companyID in (1,2)
AND EXISTS ( SELECT 1
FROM lookup l2
WHERE l2.companyID = c.companyID
AND l2.selectionID = 2
)
AND EXISTS ( SELECT 1
FROM lookup l4
WHERE l4.companyID = c.companyID
AND l4.selectionID = 4
)
ORDER BY c.companyID