2009-08-17 5 views
4

は、ここに私の問題を説明するのを助けるために、サンプルテーブルですサイトID値。ここに私の試みがあります:自身でテーブルを結合するときに重複行を除外するために、どのように

mysql> select * from test T1 
    -> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id; 
+----+--------------+--------+------+--------------+--------+ 
| id | type   | siteid | id | type   | siteid | 
+----+--------------+--------+------+--------------+--------+ 
| 1 | First Visit | 100 | 2 | Second Visit | 100 | 
| 2 | Second Visit | 100 | 1 | First Visit | 100 | 
| 3 | First Visit | 300 | NULL | NULL   | NULL | 
| 4 | First Visit | 400 | NULL | NULL   | NULL | 
| 5 | Second Visit | 500 | NULL | NULL   | NULL | 
| 6 | Second Visit | 600 | NULL | NULL   | NULL | 
+----+--------------+--------+------+--------------+--------+ 

これは基本的に私が最初の2行を除いて探している結果です。私はそのうちの1つを削除したいと思います。だから、私は次のように試しました:

mysql> select * from test T1 
    -> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id 
    -> GROUP BY T1.siteid; 
+----+--------------+--------+------+--------------+--------+ 
| id | type   | siteid | id | type   | siteid | 
+----+--------------+--------+------+--------------+--------+ 
| 1 | First Visit | 100 | 2 | Second Visit | 100 | 
| 3 | First Visit | 300 | NULL | NULL   | NULL | 
| 4 | First Visit | 400 | NULL | NULL   | NULL | 
| 5 | Second Visit | 500 | NULL | NULL   | NULL | 
| 6 | Second Visit | 600 | NULL | NULL   | NULL | 
+----+--------------+--------+------+--------------+--------+ 

これは私が探している出力です。しかし、私はこれがGROUP BYを使用する標準的な方法ではなく、上記の文がORACLEで失敗することを学びに来た

一般的なSQLエラーです。
ORA-00979:式

BY GROUPは、誰もが最後の表のような結果を取得する方法についていくつかの助けを提供することができ、それはORACLEで動作していませんか?

答えて

6

ジャスト(「<」と「<>」を置き換える)...あなたのクエリから単一の文字を削除し、それが仕事を得るだろう:

select * from test T1 
LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id < T2.id 
関連する問題