简体   繁体   中英

SQL return multiple of same record when using INNER JOIN

I have the following SQL query I am trying to run:

"SELECT Main.id, Main.created_min, Main.local_photo_name, Main.description, Main.creator, Main.title, Main.museum, technique.technique 
            FROM Main 
            INNER JOIN technique ON technique.kleding_id=Main.id 
            LIMIT 5"

I want this query to add the data from the techniques table to my results i get from my main table. This works but when i have multiple techniques associated with the same id from the main table i want these to be added in a array to the main record.

Is this possible with SQL?
This is what get so far:

[16] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => kant
    )

[17] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => satijn
    )

and I want something along the way of this:

[16] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => Array
            (
            [technique] => kant
            [technique] => satijn
            )
    )

the tables look like this:
Just to note the tables contain around 200k records each. So speed is key. 在此处输入图片说明 在此处输入图片说明

使用id为group by的方法尝试是否可行

You can do something like this:

SELECT Main.id,
       Main.created_min,
       Main.local_photo_name,
       Main.description,
       Main.creator,
       Main.title,
       Main.museum,
       JSON_ARRAYAGG(technique.technique) AS techniques
FROM Main
INNER JOIN technique ON technique.kleding_id = Main.id
GROUP BY Main.id
LIMIT 5

This will return a JSON array of techniques.Here is the documentation of the JSON_ARRAYAGG

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM