【问题标题】:MySQL: Use Distinct Query, then join same table filtering with its resultMySQL:使用 Distinct Query,然后将相同的表过滤与其结果连接起来
【发布时间】:2021-05-23 16:48:53
【问题描述】:

经过几个小时和几个死胡同,我决定与你们核实一下。如果那里有类似的问题/答案,并且我缺乏正确的 SQL 理解并没有帮助我理解它的要点,我深表歉意。但这里是:

我的目标是使用一张表为清单/待办事项创建单独的项目列表。像这样的:

 List title:
    |
    |---"First Entry Title" - "First Entry Body"
    |---"Second Entry Title" - "Second Entry Body"
    |--- Etc
    

我正在尝试先进行 Distinct 搜索,然后使用其中的结果过滤同一个表并将其与别名“items”连接起来。如果有更好的方法,那么我不介意在那里提供一些帮助。我只是想这将是它的方式。

我目前正在使用 Sequelize,偶尔会有原始查询

我有一个清单条目表,一些行共享相同的“父”,例如:

parent title body
First title1 body1
First title2 body2
Second title3 body3
Third title4 body4
Third title5 body5

我的目标是得到这样的查询结果:

parent title body
First title1 body1
title2 body2
parent title body
Second title3 body3
parent title body
Third title4 body4
title5 body5

我意识到这个版本是可行的,当 sequelize 在另一个查询中返回给我时:

{
"noteID":77,"noteContactID":"85","noteComment":"Test note","noteDate":1613429041844",
"Contact":{
     "contactID":85,"firstName":"Sully","middleName":null,"lastName":"Melland"
     }
}

但是,这是使用两个模型完成的,同样,两个不同的表。 我希望避免这种方法,所以我不需要制作一个完整的表格来过滤“父母”

 Note.findAll({
        where: {noteContactID: req.params.id},
        include: [Contact]
    })

List Example on project

Table structure in the database

提前谢谢你!

【问题讨论】:

  • 我怀疑您是否需要两张表才能完成这项工作。您只需要同一个表的两个(别名)实例。不幸的是,我不知道 node.js/sequelize,但这在 pdo 中是轻而易举的。

标签: javascript mysql node.js sequelize.js


【解决方案1】:

我想不出一种方法,它会返回一个列名,如“first”,然后在列的旁边给出两行输出。我认为您可以使用 JSON 类型的单列来存储 {task-title:task-body}。

CREATE TABLE todo (Title varchar(255), Subtask JSON);

然后,只要您有任何子任务,就可以将其存储在 JSON 键值对中。这可以存储任意数量的子任务,并且您只需要 2 列。

【讨论】:

  • 我能想到一个办法。尽管如此,数据显示的问题最好在应用程序代码中解决
  • 我认为将 {key:values} 对 JSON 数据存储在后端的 MySQL 中会更好。我看不出有任何方法可以使用 distinct 来做你想做的事情,就像你在开始时应用 distinct 一样,每个条目都会不同,如果你只选择标题作为 distinct,你将不会得到这两行并最终只有一个。
  • 我对此表示怀疑。但是,嘿,也许吧。
  • 不好意思,我想我会坚持使用两张桌子,让我的生活更轻松。也许将来我会很高兴我做到了!
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 2018-11-22
相关资源
最近更新 更多