get-real-column与sql

o7jaxewo  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(506)

我想知道如何才能在我的请求返回一个真正的列(代码)。
我总是从peoples表中得到相同的代码,而不是真正的代码:它是父代码而不是子代码。
目前我有4张table:

  1. | Peoples (id, code) <- this code
  2. | PeopleFriends (id, fk_user_id, fk_friend_id)
  3. | PeopleTranslations (id, user_name, fk_people_id, fk_language_id)
  4. | Languages (id, code)

有了这些数据:

  1. Peoples:
  2. [id: 1, code: HUMAN1]
  3. [id: 2, code: HUMAN2]
  4. [id: 3, code: HUMAN3]
  5. [id: 4, code: HUMAN4]
  6. [id: 5, code: HUMAN5]
  7. PeopleFriends:
  8. [id: 1, fk_user_id: 1, fk_friend_id: 2]
  9. [id: 2, fk_user_id: 1, fk_friend_id: 3]
  10. [id: 3, fk_user_id: 1, fk_friend_id: 4]
  11. [id: 4, fk_user_id: 1, fk_friend_id: 5]
  12. PeopleTranslations:
  13. [id: 1, username: "username human 1", fk_people_id: 1, fk_language_id: 1]
  14. [id: 2, username: "username human 2", fk_people_id: 2, fk_language_id: 1]
  15. [id: 3, username: "username human 3", fk_people_id: 3, fk_language_id: 1]
  16. [id: 4, username: "username human 4", fk_people_id: 4, fk_language_id: 1]
  17. [id: 5, username: "username human 5", fk_people_id: 5, fk_language_id: 1]
  18. Languages:
  19. [id: 1, code: "EN"]

如果我执行此请求:

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

我有一个结果:

  1. [
  2. TextRow {
  3. id: 2,
  4. code: 'HUMAN1', <--- I would like HUMAN2, not parent code
  5. user_name: 'username human 2',
  6. },
  7. TextRow {
  8. id: 3,
  9. code: 'HUMAN1', <--- I would like HUMAN3, not parent code
  10. user_name: 'username human 3',
  11. },
  12. TextRow {
  13. id: 4,
  14. code: 'HUMAN1', <--- I would like HUMAN4, not parent code
  15. user_name: 'username human 4',
  16. },
  17. TextRow {
  18. id: 5,
  19. code: 'HUMAN1', <--- I would like HUMAN5, not parent code
  20. user_name: 'username human 5',
  21. }
  22. ]
  23. ...

我总是使用相同的代码“human1”,而不是真正的代码“human2”、“human3”、“human4”
是p.id=1的代码。。。
我试图添加p代码,但我有相同的错误。

ercv8c1e

ercv8c1e1#

  1. SELECT pt.fk_people_id AS id,
  2. p1.code,
  3. pt.user_name
  4. FROM Peoples p
  5. INNER JOIN PeopleFriends pf ON p.id = pf.fk_user_id
  6. INNER JOIN Peoples p1 ON p1.id = pf.fk_friend_id
  7. INNER JOIN PeopleTranslations pt ON pf.fk_friend_id = pt.fk_people_id
  8. INNER JOIN Languages l ON pt.fk_language_id = l.id
  9. WHERE l.code = 'EN'
  10. AND p.id = 1

将查询简化为

  1. SELECT pt.fk_people_id AS id,
  2. p1.code,
  3. pt.user_name
  4. FROM PeopleFriends pf
  5. INNER JOIN Peoples p1 ON p1.id = pf.fk_friend_id
  6. INNER JOIN PeopleTranslations pt ON pf.fk_friend_id = pt.fk_people_id
  7. INNER JOIN Languages l ON pt.fk_language_id = l.id
  8. WHERE l.code = 'EN'
  9. AND pf.fk_user_id = 1
展开查看全部

相关问题