2016-05-29 1 views
1

は私のクエリです:SORTINGのためだけにSELECT文でカスタム列を作成し、SQLiteの結果でそれを表示しないでください。ここ

SELECT name, 1 as rank 
FROM names 
WHERE name LIKE '%abc%' 
UNION 
SELECT name, 2 as rank 
FROM names 
WHERE name LIKE '%xyz%' 
ORDER BY rank 

問題は、彼らがランク列に異なるであろうから重複行がUNIONで結合されることはありませんです。今、どのように私はカスタム列のランクを非表示にしますが、それでもORDER BY節で使用しますか?ありがとうございました。

EDIT:。

私は実際に、関連性でソートしようとしているなど、全体の単語& &フレーズまず、単語全体& &非正確な秒、非全体& &第3の非正確な、等々。

+0

あなたは 'UNION ALL'を試しましたか?しかし、あなたが何を望んでいるか分からない。あなたは私たちにサンプルデータ、現在の期待された結果を見せてくれますか? \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t \t \t [**スタート** ](http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)を使用して質問の質を向上させ、より良い回答を得る方法を学んでください。 –

答えて

1

unionと組み合わせることはできませんが、代わりにcase文を使用してください。これにより、重複した問題が回避されます。

Select name from 
(Select name , 
Case when name like '%abc%' then 1 else 2 end as rank 
From names 
Where name like '%and%' or name like '%xyz%' 
Order by rank) 
Group By name; 

名前から「abc」を含むすべての名前を選択し、「xyz」で名前を選択するように見えます。 「ABC」と、このクエリは何もして

が1位にランクされたと「XYZ」(はなく「ABC」)を使って何が私たちの句、我々は唯一の「ABC」または 'で名前を選択するには2

位にランクされていxyz '。この場合は 'abc'に1が適用され、他のすべての行( 'xyz'のみ)は2になります。

+0

http://www.dpriver.com/pp/sqlformat.htmを試してクエリをフォーマットしてください。 –

+1

代わりに最後の選択とは別のものを追加しました。 –

1

unionとサブクエリは忘れてしまいます。ただ、やる:

select name 
from names 
where name like '%abc%' or name like '%xyz%' 
order by (case when name like '%abc%' then 1 
       when name like '%xyz%' then 2 
       else 3 
      end); 

注意:あなたは重複を懸念している場合は、select distinct nameを使用することができます。

+0

しかし、これはどうやって動作しますか(私の無知には申し訳ありません)。 SQLiteにORDER BY 1やORDER BY 2などを指定すると、何を意味するのでしょうか?私はORDER BYを列に対してのみ使用できると考えました。ありがとうございました。 –

+0

@SidGo。 。 。式には「ORDER BY」を使用できます。これらの値は、順序付けの優先順位を指定する整数です。 –

関連する問題