MySQL查询与多个AND运算符无法正常工作

时间:2017-05-20 20:46:41

标签: mysql

我遇到查询问题:

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(*),但我很困惑。

1 个答案:

答案 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