首页  >  问答  >  正文

检索mysql中嵌套的相关值

我正在尝试根据数据库中的多个条目检索相关值。在使用 JOINs 等方面,我对 MySQL 非常陌生,我试图避免不必要地涉及 PHP

当我说“检索嵌套相关值”时,请看以下示例:

"Person" table          "Language" table          "Greeting" table

| personId | language | | languageId | greeting | | greetingId | value     | 
|----------|----------| |------------|----------| |------------|-----------|
| 1        | en       | | en         | 3        | | 1          | konichiwa |
| 2        | jp       | | jp         | 1        | | 2          | bonjour   |
| 3        | fr       | | fr         | 2        | | 3          | hello     |

如果我想检索第一个人的问候语,流程将是:

1 -> en -> 3      -- ID Flow
en -> 3 -> hello  -- Value flow
Person 1: "hello" -- Final result

或者,如果我想检索第三个人的问候语,它会改为:

3 -> fr -> 2        -- ID flow
fr -> 2 -> bonjour  -- Value flow
Person 3: "bonjour" -- Final result

那么,我该如何在 MySQL 中执行此操作?如果这已经有了答案,我深表歉意;我似乎无法找到研究正确答案的措辞。

P粉007288593P粉007288593179 天前369

全部回复(2)我来回复

  • P粉186904731

    P粉1869047312024-04-05 11:26:19

    SELECT greeting.value
    FROM person
    JOIN language ON person.language = language.languageId
    JOIN greeting ON language.greeting = greeting.greetingId
    WHERE person.personId = ?
    

    建议 - 使相对列名称相等。 IE。不是 languagelanguageId,但在两个表中使用相同的名称(例如使用 languageId)。 Greeting 和greetingId 列也是如此。这将使查询更加简单:

    SELECT greeting.value
    FROM person
    NATURAL JOIN language
    NATURAL JOIN greeting
    WHERE person.personId = ?
    

    回复
    0
  • P粉194541072

    P粉1945410722024-04-05 00:49:17

    JOIN 根据某些条件连接两个表的记录。例如您想要将表“Person”中的记录与表“Language”中的记录连接起来,以便列 language 中的值等于列 languageId 中的值可以通过给出以下 FROM 子句来做到这一点:

    FROM Person INNER JOIN Language 
      ON Person.language = Language.languageId

    这个 JOIN 的结果是一个看起来像这样的表

    Person.personId 人物.语言 语言.语言Id 语言.greeting
    1 一个 一个 3
    2 日本 日本 1
    3 fr fr 2

    回复
    0
  • 取消回复