2017-10-09 82 views
-1

錯誤我有一個數據集如下:ORA-01427單行子查詢返回的select語句

ID keyword1 
1 abc 
2 abc1 
1 xyz 
3 hjh 
3 pou 

我想要的輸出如下:

ID keyword1 keyword2 
1 abc  xyz 
2 abc1 
3 hjh  pou 

的條件是:如果有對於一個特定的ID是多於1行,那麼我應該在同一個ID行中得到另一列關鍵字。如果沒有匹配的行,那麼它應該是null。

我使用下面的查詢:

select c.ID, 
    (select KEYWORD from table1 a where a.ECF_RULE_ID=c.ECF_RULE_ID) as KEYWORD1, 
    (select KEYWORD from table2 b where b.ECF_RULE_ID=c.ECF_RULE_ID) as KEYWORD2 
from table3 c 

,但我得到的錯誤是:

ORA-01427:單行子查詢返回不止一行。

請大家幫忙。

+0

你使用MySQL或Oracle? (不要標記不涉及的產品。) – jarlh

+0

跳過子查詢,改爲執行LEFT JOIN。 – jarlh

+0

您的查詢包含3個表格,但只有一個表格(或?)的示例數據 - 另外兩個表格是怎麼樣的? – jarlh

回答

0

看起來你需要類似的東西;

select 
c.ID, 
a.keyword as KEYWORD1, 
b.keyword as KEYWORD2 

from 
table3 c 
LEFT JOIN table1 a ON a.ECF_RULE_ID=c.ECF_RULE_ID 
LEFT JOIN table2 b ON b.ECF_RULE_ID=c.ECF_RULE_ID 

請注意連接,這是非常強大的。

+0

由於很多,這很有幫助。 – Priyam

0

如果通過ID有超過2的值,可能是你可以嘗試另一種方法,使用「分析窗口功能」之類排名

​​

結果:

ID KEYWORD POSITION 
1 abc  1 
1 xyz  2 
2 abc1  1 
3 hjh  1 
3 pou  2 
0

我認爲你是試圖使用相關的查詢來返回您可能獲得的結果,如下所示。

SELECT id 
    ,keyword1 
    ,CASE 
     WHEN keyword2 <> keyword1 
      THEN keyword2 
     ELSE NULL 
     END AS keyword2 
FROM (
    SELECT DISTINCT c.id 
     ,(
      SELECT min(keyword) 
      FROM t1 a 
      WHERE a.ID = c.ID 
      ) AS Keyword1 
     ,(
      SELECT max(keyword) 
      FROM t1 b 
      WHERE b.ID = c.ID 
      ) AS Keyword2 
    FROM t1 c 
    ) t 
order by id; 

什麼上述查詢的作用是使內相關查詢返回對應在單獨的列minmax值,distinct刪除重複和casekeyword2NULL如果匹配keyword1值。

結果:

id keyword1 keyword2 
------------------------ 
1 abc   xyz 
2 abc1   
3 hjh   pou 

您可以查看演示here


更新1:

您還可以使用left join如下,以獲得您想要的結果。

SELECT id 
    ,keyword1 
    ,CASE 
     WHEN keyword2 <> keyword1 
      THEN keyword2 
     ELSE NULL 
     END AS keyword2 
FROM (
    SELECT a.id 
     ,max(a.keyword) AS keyword1 
     ,min(b.keyword) AS keyword2 
    FROM t1 a 
    LEFT JOIN t1 b ON a.id = b.id 
    GROUP BY a.id 
    ) t 
ORDER BY id; 

結果:

id keyword1 keyword2 
------------------------ 
1 abc   xyz 
2 abc1   
3 hjh   pou 

DEMO

+0

非常感謝,這有所幫助。 – Priyam

+0

請仔細閱讀如果[**答案有幫助**](https://stackoverflow.com/help/someone-answers):-)該怎麼辦 – zarruq