简体   繁体   English

SQL - 连接同一个表中的行

[英]SQL - joining rows from same table

I only know the bare min when it comes to SQL so please treat me as a complete noob! 我只知道最简单的SQL,所以请把我当成一个完整的菜鸟吧!

I have a table which has many rows but some of them can pair up by the id and I want return array of those rows merged. 我有一个有很多行的表,但有些可以通过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      #

as a scaled down version, imagine the above of my table and I am aiming to return 2 results of 作为缩小版本,想象一下我的表格,我的目标是返回2个结果

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

based on that the ids are related and that c2 has the value of 'on' 基于ids相关且c2的值为'on'

my attempt was the following from some reading but not getting anywhere 我的尝试是从一些阅读,但没有得到任何地方的以下

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'

any help would be muchly appreciated 任何帮助将非常感激

** EDIT ** **编辑**

I thought Id just post the syntax which worked nicely below thanks to the answer below: 我想我只是发布了下面的答案得到了很好的语法:

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

THanks again. 再次感谢。

Create test data: 创建测试数据:

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.

Query to give results matching OP's sample: 查询以给出匹配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

I still do not know what WHERE t1.meta_name = 'featured-products' has do to do with anything since no sample data includes t1.meta_name of the string 'featured-products'. 我仍然不知道什么是WHERE t1.meta_name = 'featured-products'与任何事情有关,因为没有样本数据包括字符串'featured-products'的t1.meta_name。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM