搜尋

首頁  >  問答  >  主體

檢索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粉007288593228 天前484

全部回覆(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
  • 取消回覆