【问题标题】:Get real column with SQL使用 SQL 获取真实列
【发布时间】:2020-11-18 04:21:12
【问题描述】:

我想知道如何在我的请求中返回一个真实的列(代码)。

我总是使用 Peoples 表中相同的 code,而不是真正的 code:它是父代码而不是子代码。

目前我有 4 张桌子:

| Peoples (id, code) <- this code
| PeopleFriends (id, fk_user_id, fk_friend_id)
| PeopleTranslations (id, user_name, fk_people_id, fk_language_id)
| Languages (id, code)

有了这些数据:

Peoples:
[id: 1, code: HUMAN1]
[id: 2, code: HUMAN2]
[id: 3, code: HUMAN3]
[id: 4, code: HUMAN4]
[id: 5, code: HUMAN5]

PeopleFriends:
[id: 1, fk_user_id: 1, fk_friend_id: 2]
[id: 2, fk_user_id: 1, fk_friend_id: 3]
[id: 3, fk_user_id: 1, fk_friend_id: 4]
[id: 4, fk_user_id: 1, fk_friend_id: 5]

PeopleTranslations:
[id: 1, username: "username human 1", fk_people_id: 1, fk_language_id: 1]
[id: 2, username: "username human 2", fk_people_id: 2, fk_language_id: 1]
[id: 3, username: "username human 3", fk_people_id: 3, fk_language_id: 1]
[id: 4, username: "username human 4", fk_people_id: 4, fk_language_id: 1]
[id: 5, username: "username human 5", fk_people_id: 5, fk_language_id: 1]

Languages:
[id: 1, code: "EN"]

如果我执行这个请求:

SELECT pt.fk_people_id AS id, p.code, pt.user_name FROM Peoples p 
INNER JOIN PeopleFriends pf ON p.id = pf.fk_user_id 
INNER JOIN PeopleTranslations pt ON pf.fk_friend_id = pt.fk_people_id 
INNER JOIN Languages l ON pt.fk_language_id = l.id 
WHERE l.code = 'EN'
AND p.id = 1

我有这个结果:

[
TextRow {
    id: 2,
    code: 'HUMAN1', <--- I would like HUMAN2, not parent code
    user_name: 'username human 2',
},
TextRow {
    id: 3,
    code: 'HUMAN1', <--- I would like HUMAN3, not parent code
    user_name: 'username human 3',
},
TextRow {
    id: 4,
    code: 'HUMAN1', <--- I would like HUMAN4, not parent code
    user_name: 'username human 4',
},
TextRow {
    id: 5,
    code: 'HUMAN1', <--- I would like HUMAN5, not parent code
    user_name: 'username human 5',
}
]
...

我总是使用相同的代码“HUMAN1”,而不是真正的代码“HUMAN2”、“HUMAN3”、“HUMAN4”

这是 p.id = 1 的代码...

我尝试添加 p.code,但我遇到了同样的错误。

【问题讨论】:

  • 我有这个结果: 显示产生这个输出的源数据。解释为什么它“必须是……”。
  • @Akina 感谢您的评论,我更新了我的帖子。我想要“子代码”而不是“父代码”
  • 请将表结构和示例数据发布为 CREATE TABLE + INSERT INTO 脚本。当前表格不适用于测试目的..

标签: mysql sql graphql apollo-server


【解决方案1】:
SELECT pt.fk_people_id AS id, 
       p1.code, 
       pt.user_name 
FROM       Peoples p 
INNER JOIN PeopleFriends pf      ON p.id = pf.fk_user_id 
INNER JOIN Peoples p1            ON p1.id = pf.fk_friend_id
INNER JOIN PeopleTranslations pt ON pf.fk_friend_id = pt.fk_people_id 
INNER JOIN Languages l           ON pt.fk_language_id = l.id 
WHERE l.code = 'EN'
  AND p.id = 1

考虑到 WHERE 中的条件,可以将查询简化为

SELECT pt.fk_people_id AS id, 
       p1.code, 
       pt.user_name 
FROM       PeopleFriends pf
INNER JOIN Peoples p1            ON p1.id = pf.fk_friend_id
INNER JOIN PeopleTranslations pt ON pf.fk_friend_id = pt.fk_people_id 
INNER JOIN Languages l           ON pt.fk_language_id = l.id 
WHERE l.code = 'EN'
  AND pf.fk_user_id = 1

【讨论】:

  • 完美@Akina !谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多