Есть ли способ выбрать данные из одного столбца в таблице SQL, чтобы получить таблицу с несколькими столбцами?

#mysql #sql

#mysql #sql

Вопрос:

Итак, у меня есть две таблицы SQL: одна с идентификатором, а в другой — meta value и meta_key. Я присоединился к ним, чтобы это выглядело примерно так:

  ------ ------------ ---------- 
|  id  | meta_value | meta_key |
 ------ ------------ ---------- 
| 1544 | product1   |        1 |
| 1544 | 2          |        2 |
| 1545 | product2   |        1 |
| 1545 | 5          |        2 |
| 1546 | product3   |        1 |
| 1546 | 10         |        2 |
 ------ ------------ ---------- 
  

И я хочу получить запрос, который показал бы мне такую таблицу:

  ------ ------------ ------------ 
|  id  | meta_value | meta_value |
 ------ ------------ ------------ 
| 1544 | product1   |          2 |
| 1545 | product2   |          5 |
| 1546 | product3   |         10 |
 ------ ------------ ------------ 
  

SQL-запрос для первой таблицы выглядит следующим образом:

 SELECT
    wprq_gf_entry.id,
    wprq_gf_entry_meta.meta_value,
    wprq_gf_entry_meta.meta_key 
FROM
    wprq_gf_entry 
    INNER JOIN wprq_gf_entry_meta ON wprq_gf_entry.id = wprq_gf_entry_meta.entry_id 
WHERE
    wprq_gf_entry_meta.form_id = 6
  

Есть ли способ сделать это? … Спасибо!

Комментарии:

1. Почему wprq_gf_entry_meta.form_id = 6 дважды?

2. @jarlh . . . Почему один раз? Похоже, это не имеет ничего общего с образцом данных.

3. @jarlh извините, это была ошибка. Достаточно одного раза.

4. @GordonLinoff На самом деле это не имеет ничего общего с образцами данных, но имеет отношение к моему коду…

Ответ №1:

Вы можете использовать JOIN , но вам нужно два из них:

 SELECT e.*, m1.meta_value, m2.meta_value
FROM wprq_gf_entry e JOIN
     wprq_gf_entry_meta m1
     ON e.id = m1.entry_id AND m1.meta_key = 1 JOIN
     wprq_gf_entry_meta m2
     ON e.id = m2.entry_id AND m2.meta_key = 2;
  

Комментарии:

1. Извините, но этот код не работает для меня… Я тоже новичок в sql, поэтому, если бы вы могли мне помочь.

Ответ №2:

Вы можете использовать созданную вами таблицу, назовем ее joined_table.

 With joined_table as(
    SELECT
        wprq_gf_entry.id,
        wprq_gf_entry_meta.meta_value,
        wprq_gf_entry_meta.meta_key 
    FROM wprq_gf_entry 
         INNER JOIN wprq_gf_entry_meta ON wprq_gf_entry.id 
         = wprq_gf_entry_meta.entry_id 
    WHERE wprq_gf_entry_meta.form_id = 6
    
)
  

Мы разделили ее на две таблицы — одну с мета-ключом = 1, а другую с мета-ключом = 2.
Затем мы объединяем их

 Select jt.id, jt.meta_value as meta_value_1, 
            jt2.meta_value as meta_value_2
From joined_table jt
         Join joined_table jt2 
         On jt.id = jt2.id
         And jt2.meta_key = 2
Where jt.meta_key = 1