【问题标题】:MySQL Insert where not exists query won't insert if even one row exists如果即使存在一行,MySQL Insert where not exists 查询也不会插入
【发布时间】:2013-05-10 09:29:58
【问题描述】:

我有一个非常复杂的查询。我所拥有的是一个带有汽车零件的表(parts_list,大约 600 行),其中包含有关零件的一些信息,例如它的名称以及它是否依赖于电机。对于电机依赖,我有两个不同的查询,所以这是一个没有电机依赖的查询(0,我将其保存为布尔值)。大多数零件都可以拆卸并分解成更多零件,这就是为什么我将零件保存为一棵树,并且在该查询中我只取无法拆卸的零件(树叶)。此表仅代表可能部分的列表。现在对于每个汽车型号,我在另一个表(零件)中保存一行,然后将parts_list_id 和model_id 放在一起,然后是价格和数量。现在,如果我运行查询,它将在表“parts”中成功生成大约 500 行(仅获取叶子部分),它会做我需要的。模型 id 大约有 500 个(叶)零件。但有时我会为特定零件的另一个模型生成一行。然后查询不会产生其余的 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
)

【问题讨论】:

    标签: mysql insert exists


    【解决方案1】:

    嗯,sql 语句看起来不错。如果只有一行,NOT EXISTS 返回 false。这是正确的。没有插入任何行。也许您想使用parts_list_id NOT IN(您的子查询)而不是NOT EXISTS 进行一些不同的检查。

    NOT EXISTS 表示集合作为一个整体的条件,NOT IN 用于确定集合是否具有正确的项。

    我希望能做对。仅仅通过一个语句来理解您的域有点困难。

    【讨论】:

    • 谢谢,我不知道 NOT EXIST 对所有行都是全局的。我设法通过锁定两个 id 来工作——一个来自 WHERE NOT EXISTS 子句中的子查询,另一个来自 SELECT 查询。但无论如何,我没有使用正确的关键字。 NOT IN 是应该使用的。
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多