我只知道有关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'
任何帮助将不胜感激
编辑
我认为Id只需发布下面的语法就可以了,这要归功于下面的答案:
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。
WHERE t1.meta_name = 'featured-products'