从多个条件请求中选择行

时间:2015-01-15 17:22:48

标签: php mysql sql select where

我有一个名为“proposition”的MySQL表,主键为“idProposition”,另一个表名为“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中的命题)是否为null,因为有几个结果。 如何测试内部SELECT是否提供结果?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用

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

答案 1 :(得分:0)

试试这个:

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子句。