gpt4 book ai didi

SQL - 连接来自同一个表的行

转载 作者:行者123 更新时间:2023-12-01 12:59:30 25 4
gpt4 key购买 nike

我对 SQL 只知道一点点,所以请把我当作一个完全的菜鸟!

我有一个表,其中有很多行,但其中一些可以通过 id 配对,我想返回合并这些行的数组。

 post_id  # meta_name # meta_value  #     
======================================
1 # bar # 44 #
1 # foo # on #
2 # bar # 1 #
2 # foo # on #
3 # bar # 1 #
3 # foo # off #

作为缩小版,想象一下上面的表格,我的目标是返回 2 个结果

   1    #   foo    #  bar    #   44   #  on
2 # foo # bar # 1 # on

基于 id 是相关的并且 c2 具有 'on' 的值

我的尝试是从一些阅读中得到的,但没有得到任何结果

SELECT 
t1.post_id, t2.post_id, t1.meta_name, t2.meta_name, t1.meta_value, t2.meta_value
FROM
`ecom_page_meta` t1
JOIN
`ecom_page_meta` t2
ON
t1.post_id = t2.post_id
WHERE
t1.meta_name = 'featured-products'
AND
t1.meta_value = 'on'

任何帮助将不胜感激

** 编辑 **

由于下面的回答,我认为我只是在下面发布了很好用的语法:

SELECT L.post_id, L.meta_name, R.meta_name, L.meta_value, R.meta_value
FROM `ecom_page_meta` L
INNER JOIN ecom_page_meta R
ON L.post_id = R.post_id
AND L.meta_name = 'featured-products-order'
AND R.meta_value = 'on'
WHERE R.meta_name = 'featured-products'
ORDER BY L.meta_value
DESC

再次感谢。

最佳答案

创建测试数据:

SQL> create table ecom_page_meta (post_id number not null
2 , meta_name varchar2(15) not null
3 , meta_value varchar2(15) not null);

Table created.

SQL> insert into ecom_page_meta values (1, 'bar', '44');

1 row created.

SQL> insert into ecom_page_meta values (1, 'foo', 'on');

1 row created.

SQL> insert into ecom_page_meta values (2, 'bar', '1');

1 row created.

SQL> insert into ecom_page_meta values (2, 'foo', 'on');

1 row created.

SQL> insert into ecom_page_meta values (3, 'bar', '1');

1 row created.

SQL> insert into ecom_page_meta values (3, 'foo', 'off');

1 row created.

SQL> commit;

Commit complete.

查询以给出与 OP 样本匹配的结果:

SQL> select L.post_id, L.meta_name, R.meta_name, L.meta_value, R.meta_value
2 from ecom_page_meta L
3 inner join ecom_page_meta R
4 on L.post_id = R.post_id
5 and L.meta_value <> 'on'
6 and R.meta_value = 'on'
7 where L.meta_name = 'bar';

POST_ID META_NAME META_NAME META_VALUE META_VALUE
---------- --------------- --------------- --------------- ---------------
1 bar foo 44 on
2 bar foo 1 on

我仍然不知道 WHERE t1.meta_name = 'featured-products' 有什么关系,因为没有样本数据包含字符串 'featured-products' 的 t1.meta_name。

关于SQL - 连接来自同一个表的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421437/

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