#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