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 列。
几个小时后,几个 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 列。