SQL - объединение строк из одной таблицы - PullRequest
3 голосов
/ 14 сентября 2011

Я знаю только минимальные значения, когда дело доходит до SQL, поэтому, пожалуйста, относитесь ко мне как к полному noob!

У меня есть таблица, в которой много строк, но некоторые из них могут быть связаны по 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

, основываясь на том, чтоидентификаторы связаны, и что 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

Спасибо еще раз.

1 Ответ

4 голосов
/ 15 сентября 2011

Создать тестовые данные:

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' имеет к чему-либо, поскольку ни один из примеров данных не содержит t1.meta_name строки 'featured-products'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...