我的查询非常复杂。我所拥有的是一个带有汽车零件的表(parts_list,大约600行),其中包含有关该零件的一些信息,如它的名称以及它是否依赖于电机。对于电机依赖我有两个不同的查询,所以这是没有电机依赖的那个(0,我把它保存为布尔值)。大部分零件可以拆卸并拆分成更多零件,这就是我将零件保存为树的原因,在该查询中我只采用了无法拆卸的零件(树叶)。此表仅表示可能的部件列表。现在,对于每个汽车模型,我在另一个表(部件)中保存一行,我将parts_list_id和model_id粘在一起,然后是价格和数量。现在,如果我运行查询,它将成功生成表“parts”中的大约500行(仅采用叶子部分),它将完成我需要的操作。大约500(叶)部件的型号ID。但有时我会为特定部分生成另一个模型的行。然后查询不会剩下499行。它仅在WHERE NOT EXISTS选择查询返回0时有效。如果存在一行,则不插入其余行。但它对我来说没有意义,因为它不应该用不同的值来检查,比如循环吗?
INSERT INTO parts (parts_list_id, model_id, motor_id)
SELECT orig1.id, '" . $this->model_id . "', '0'
FROM parts_list AS orig1
LEFT JOIN parts_list AS orig2 ON ( orig1.id = orig2.parent_id )
WHERE orig2.id IS NULL
AND orig1.motor_dependent = '0'
AND NOT EXISTS (
SELECT t1.id
FROM parts_list AS t1
LEFT JOIN parts_list AS t2 ON ( t1.id = t2.parent_id )
LEFT JOIN parts ON ( parts.parts_list_id = t1.id )
WHERE t2.id IS NULL
AND t1.motor_dependent = '0'
AND parts.parts_list_id = t1.id
AND parts.model_id = :model_id
)
答案 0 :(得分:0)
好吧,sql语句看起来很好。如果有一行,则NOT EXISTS返回false。这是正确的。没有插入任何行。也许您想使用parts_list_id NOT IN(您的子查询)而不是NOT EXISTS进行一些不同的检查。
NOT EXISTS表示整个集合的条件,NOT IN用于确定集合是否具有正确的项目。
我希望能做对。仅从一个声明中了解您的域名有点困难。