2011-09-14 58 views
3

我只知道關於SQL的裸機,所以請把我當成一個完整的noob!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具有的「價值在」

我的嘗試是從一些閱讀下面的,但沒有得到任何地方

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 

再次感謝。

+1

它看起來像你試圖將結果從行轉移到基於id的列。你確定你想把c1/c2的值作爲列嗎?每個ID總會有2行嗎?他們中只有一個會上? – TheCodeKing

+2

您的表格描述包含C1和C2,SQL代碼,meta_name和meta_value。請更新表格以使用代碼中使用的實際名稱。另外,'t1.meta_name ='featured-products'是一個問題,因爲示例數據根本不包含該字符串。一個完整的猜測是,你希望最後一行是't2.meta_value ='on''。 –

+0

抱歉,我認爲這很明顯,我會更新。並且不,它們不能與真正的行相同,因爲它們與不同的模塊設置和結果有關 –

回答

3

創建測試數據:

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有什麼關係。字符串'featured-products'的meta_name。

+0

非常感謝,它不是第一次工作,因爲它是從其他模塊返回的結果,但只是花了2分鐘後才發現我嘗試了以上。非常感謝您花時間。 –

相關問題