gpt4 book ai didi

mysql - 加入两个表并从第二个表中读取两条记录

转载 作者:行者123 更新时间:2023-11-29 01:20:16 24 4
gpt4 key购买 nike

我想加入两个表,从第一个表中读取一条记录,从第二个表中读取两条记录。第一个表有一些我想全选的字段。第二个表已通过外键连接到第一个表。

第一个表:

+----+-------------+
| 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

如果您只有 2 种类型的元数据,则上述查询有效。如果您有更多或数量是动态的,则需要不同的方法。

关于mysql - 加入两个表并从第二个表中读取两条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com