Maison  >  Questions et réponses  >  le corps du texte

Requête MySQL pour convertir les lignes de plusieurs tables en colonnes

<p>Je dois vous poser des questions sur la requête de sélection MySQL à partir de 3 tables. </p> <p>J'ai 3 tables similaires : </p> <p><strong>table_1</strong></p> <pre class="brush:php;toolbar:false;">menu_id | 1 | 2 | Menu 2</pré> <p><strong>table_2</strong></p> <pre class="brush:php;toolbar:false;">item_id menu_id | 1 | 1 | Projet 1 2 | 1 | Projet 2 3 | 2 | Projet 3 4 | 2 | Projet 4</pré> <p><strong>table_3</strong></p> <pre class="brush:php;toolbar:false;">price_id item_id | 1 | 1 | 3,65 euros 2 | 1 | 3,45 dollars américains 3 | 2 | 9,00 euros 4 | 4 | 5 | 4 | RON 9,60</pré> <p>Je dois effectuer la sortie SELECT suivante : </p> <pre class="brush:php;toolbar:false;">item_id | menu_id | 1 | élément 1 | 1 | 2 | élément 2 | 1 | 3 | élément 3 | 2 | 4 | Élément 4 | 2 | Menu 2 | 0 | 0 | <p>Je souhaite remplir les colonnes de la requête (p_EUR, p_USD, etc.) avec les lignes de la table_3. S'il n'y a aucun enregistrement correspondant, 0 ou NULL est renvoyé. Les tables sont jointes via <code>table_1.menu_id=table_2.menu_id</code> et <code>table_2.item_id=table_3.item_id</code>. </p>
P粉882357979P粉882357979405 Il y a quelques jours502

répondre à tous(1)je répondrai

  • P粉476046165

    P粉4760461652023-08-14 10:06:04

    Vous pouvez utiliser case when

    SELECT
    t2.item_id,
    t2.item_name,
    t2.menu_id,
    t1.menu_name,
     MAX(CASE WHEN t3.currency_code = 'EUR' THEN t3.price END) AS p_EUR,
     MAX(CASE WHEN t3.currency_code = 'USD' THEN t3.price END) AS p_USD,
     MAX(CASE WHEN t3.currency_code = 'GBP' THEN t3.price END) AS p_GBP,
     MAX(CASE WHEN t3.currency_code = 'RON' THEN t3.price END) AS p_RON,
     MAX(CASE WHEN t3.currency_code = 'LEV' THEN t3.price END) AS p_LEV
    FROM table_2 AS t2
    JOIN table_1 AS t1 ON t2.menu_id = t1.menu_id
    LEFT JOIN table_3 AS t3 ON t2.item_id = t3.item_id
    GROUP BY t2.item_id, t2.item_name, t2.menu_id, t1.menu_name;

    Si vous devez convertir null en 0, vous pouvez utiliser COALESCE comme indiqué ci-dessous COALESCE(MAX(CASE WHEN t3.currency_code = 'LEV' THEN t3.price END), 0) AS p_LEV

    répondre
    0
  • Annulerrépondre