有没有一种方法可以从SQL表的一列中选择数据以获取具有多列的表?

时间:2020-09-24 15:05:57

标签: mysql sql

所以我有两个SQL表:一个是ID,另一个是meta值和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

有没有办法做到这一点? ...谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用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 :(得分:0)

您可以使用您创建的表,我们称其为join_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
    
)

将其分为两个表-一个表的meta-key = 1,另一个表的meta-key = 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