【问题标题】:how to ignore parent_id in duplicate quotes in mysql query?如何在mysql查询中忽略重复引号中的parent_id?
【发布时间】:2014-08-15 04:43:02
【问题描述】:

我的mysql数据库表结构如下:

quote_id     parent_id
-----------------------
1              NULL
2              NULL
3              2
4              3
5              4
6              NULL 

我想在结果中显示详细信息,如下所示。

quote_id     parent_id
-----------------------
1              NULL
3              2 
5              4 
6              NULL 

如何为这个结果构建我的 sql 查询? (只是我想忽略重复的父 ID,除了 NULL 值)

这是一个报价表,一旦编辑了报价,编辑后的报价会将报价表更新为原始报价的子报价。

这里我想避免以前的(编辑的)引号,只显示结果中的最新。

感谢任何帮助。谢谢。

【问题讨论】:

  • “我想忽略重复的父 ID” - 但预期的输出显示 null 两次?事实上,它甚至与原始表格内容不匹配。
  • @Jack 是的,你是对的,我的错。我想忽略除 NULL 值之外的重复父 ID。我更正了。
  • 好的,但是为什么4 => 3 变成了5 => 4
  • 一旦报价被更新[编辑]报价将作为新报价插入,原始报价将成为该报价的父(parent_id)。希望你明白我的意思。 :)
  • 恐怕我没有(明白你的意思)。所以你不是在谈论 SELECT 查询?

标签: mysql sql


【解决方案1】:

使用UNION 构造一个语句怎么样?上面的查询得到quote_id 的列表,没有parent_id,而下面的查询得到每个parent_id 的最低quote_id 的列表。

SELECT quote_id, parent_id
FROM TableName
WHERE parent_id IS NULL

UNION ALL

SELECT MIN(quote_id) AS quote_id, parent_id
FROM TableName
WHERE parent_id IS NOT NULL
GROUP BY parent_id
ORDER BY quote_id

不使用UNION ALL

SELECT MIN(quote_id) AS quote_id, parent_id
FROM TableName
GROUP BY IFNULL(parent_id, RAND())
ORDER BY quote_id

【讨论】:

  • 感谢您的快速回复,您对问题的回答是正确的,因为我对结果视图有误,现在更改了结果视图。你能重新检查一下吗?我很抱歉修改。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2013-08-28
  • 1970-01-01
  • 2021-12-21
  • 2021-03-30
  • 1970-01-01
相关资源
最近更新 更多