MySQL:使用 Distinct Query,然后将相同的 table 过滤与其结果连接起来

MySQL: Use Distinct Query, then join same table filtering with its result

几个小时后,几个 dead-ends,我决定和你们核实一下。如果那里有类似的 question/answer,而我缺乏适当的 SQL 理解并没有帮助我理解它的要点,我深表歉意。但是这里是:

我的目标是使用一个 table 为 checklist/to-do 创建一个单独的项目列表。像这样:

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

我尝试先进行 Distinct 搜索,然后使用搜索结果过滤相同的 table 并将其与别名 'items' 合并。如果有更好的方法,那么我不介意在那里提供一些帮助。我只是想这样就可以了。

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

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

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"
     }
}

然而,这是用两个模型完成的,同样,两个不同的 tables。 我希望避免这种方法,所以我不需要做一个完整的 table 来过滤“parent”

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

List Example on project

Table structure in the database

提前致谢!

我想不出有什么方法可以 return 像 'first' 这样的列名称,然后在列的旁边给出两行输出。我认为您可以使用 JSON 类型的单个列来存储 {task-title:task-body}。

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

然后每当你有任何子任务时,你可以将它存储在JSON键值对中。你可以存储任意数量的子任务,你只需要 2 列。