我有一个名为“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是否提供结果?
谢谢你的帮助。
答案 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
子句。