0

有前端系统,它在表中输入这种类型的数据,我无法控制。假设表是我的查询结果:

Row|    id| entity_code|    entity_value
1            1      Null        22
2            2      Null        28
3            3      Null        32
4            3   Test Entity  Test Entity
5            4      Null        22

在上面的查询返回表示例中,前端输入带有新记录的“测试实体”,而不是覆盖 id=3

实际上表是非常复杂的 n 有十几个连接,我想要我的查询的 WHERE 条件,如果“entity_code”列为空并且没有其他记录具有相同的“Entryid”则可以删除(第 1,2 n 4 行)但是如果 'entity_code' 列不为空(第 4 行)并且存在具有相同 'id' 的其他记录(例如第 3 行)。条件结果如下所示:

Row|  Entry|    entity_code|    entity_value
1        1              Null        22
2        2              Null        28
3        3           Test Entity    32
4        4              Null        22

我需要显示这种结果的 Where 条件。

4

1 回答 1

2

如果我正确理解您的逻辑,这应该会给您正确的结果:

SELECT
  e1.min_row row,
  e1.id,
  e2.max_value,
  e.entity_value
FROM
  entity e INNER JOIN (
    SELECT
      id,
      MIN(row) min_row
    FROM
      entity
    GROUP BY
      id
    ) e1
  ON e.row = e1.min_row
  INNER JOIN (
    SELECT
      id,
      MAX(entity_code) max_value
    FROM
      entity
    GROUP BY
      id
    ) e2
  ON e1.id = e2.id

在此处查看小提琴。

这也更简单,适用于您的示例数据,但我不确定它是否适用于您的真实数据(这取决于您的数据库结构):

SELECT
  e1.Row,
  e1.id,
  e2.entity_code,
  e1.entity_value
FROM
  entity e1 LEFT JOIN entity e2
  ON e2.entity_code IS NOT NULL
     AND e1.id = e2.id AND e1.Row!=e2.Row
WHERE
  e1.entity_code IS NULL
于 2013-04-03T19:46:12.763 回答