从多条件请求中选择行

Selection of lines from a multiple condition request

我有一个名为 "proposition" 的 MySQL table,主键为 "idProposition",另一个 table 名为 "needs",列为 "idProposition" 和 "idRequirement"。我想获得链接需求的命题都在 $requireList php 数组中。

我试过这样做:

$req = "SELECT idProposition FROM proposition
        WHERE (SELECT idProposition FROM proposition
                 WHERE needs.idProposition = proposition.idProposition
                       AND idRequirement NOT IN($requireList))
          IS NULL";

但是当我发出请求时,出现以下错误:

#1242 - Subquery returns more than 1 row 

这意味着它无法测试结果($requireList 中没有需求的命题)是否为空,因为有多个结果。 我如何测试内部 SELECT 是否提供结果?

谢谢你的帮助。

尝试使用

SELECT idProposition FROM proposition 
INNER JOIN needs on proposition.idProposition = needs.idproposition

而不是

SELECT idProposition FROM proposition
        WHERE (SELECT idProposition FROM proposition
                 WHERE needs.idProposition = proposition.idProposition

试试这个:

SELECT p.*
FROM proposition p
  INNER JOIN needs n ON n.idProposition = p.idProposition
WHERE idRequirement IN (1, 7, 9)    # blah, blah, blah, put your list here
GROUP BY p.idProposition
HAVING COUNT(idRequirement) = 3     # put the size of the list here

它的作用:它SELECT将所有与列表中的要求相符的提议放在一起。只链接一个需求还是所有需求都无关紧要。然后它 GROUP 那些行 BY 命题。每个命题都会产生一行数据。然后它只从这些行中保留那些 HAVING 与列表大小相同的要求(即所有要求都存在)。

我没有测试它,但它应该可以工作。如果没有,只需将 COUNT(idRequirement) 添加到 SELECT 子句。