簡體   English   中英

連接兩個表並從第二個表中讀取兩個記錄

[英]Join two table and reads two record from second table

我想加入兩個表,從第一個表中讀取一個記錄,從第二個表中讀取兩個記錄。 第一個表有一些我想全選的字段。 第二個表已通過外鍵連接到第一個表。

第一表:

+----+-------------+
| id | some_fields |
+----+-------------+
| 23 |    S.T      |
+----+-------------+
| 24 |    S.T      |
+----+-------------+
| 25 |    S.T      |
+----+-------------+

第二張桌子

+----+----------+------------+
| fid| meta_key | meta_value |
+----+----------+------------+
| 24 |   meta_1 |   m_1      |
+----+----------+------------+
| 24 |   meta_2 |   m_2      |
+----+----------+------------+
| 25 |   meta_2 |   m_3      |
+----+----------+------------+

我想要的倉庫:

+----+-------------+--------+-------+
| id | some_fields | meta_1 | meta_2|
+----+-------------+--------+-------+
| 24 |     S.T     |   m_1  |  m_2  |
+----+-------------+--------+-------+
| 25 |     S.T     |   null |  m_3  |
+----+-------------+--------+-------+

我知道此查詢是錯誤的:

 SELECT *
    FROM posts
    INNER JOIN postmeta ON ( posts.id = postmeta.fid )
    WHERE 1 =1
    AND (
    postmeta.meta_key = 'meta_1'
    OR postmeta.meta_key = 'meta_2'
    )
    AND posts.post_type = 'ignition_product'
    AND (
    posts.post_status = 'publish'
    OR posts.post_status = 'private'
    )
    GROUP BY posts.ID
    ORDER BY postmeta.meta_value +0 DESC
    LIMIT 0 , 7

使用多個聯接到postmeta表:

SELECT posts.id, posts.some_fields, meta1.meta_value as meta_1, meta2.meta_value as meta_2
FROM posts
    LEFT JOIN postmeta meta1 ON posts.id = meta1.fid AND meta_key = 'meta1'
    LEFT JOIN postmeta meta2 ON posts.id = meta2.fid AND meta_key = 'meta2'
WHERE meta1.fid IS NOT NULL OR meta2.fid IS NOT NULL

第一個JOIN將用於填充列meta_1的數據,第二個meta_2填充列meta_2

如果您只有兩種類型的元,則上面的查詢有效。 如果您有更多或數量是動態的,則需要使用其他方法。

使用數據透視查詢:

SELECT t1.id,
       t1.some_fields,
       t2.meta_1,
       t2.meta_2      
FROM posts t1
LEFT JOIN
(
    SELECT fid,
           MAX(CASE WHEN meta_key = 'meta_1' THEN meta_value END) AS meta_1,
           MAX(CASE WHEN meta_key = 'meta_2' THEN meta_value END) AS meta_2
    FROM postmeta
    GROUP BY fid
) t2
    ON t1.id = t2.fid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM