まず第一に、この質問のタイトルはひどいですが、私は自分の問題を説明するためのより良い方法を見つけられませんでした。
これを行うにはおそらく非常に簡単な方法がありますが、私はそれを理解できませんでした。これはこの質問に非常に似ていますが、私はsqlite3(iOS)で実行しているので、オプションがはるかに制限されていると思います。
製品レコードのテーブルがあります。すべてのレコードにはIDがあります(注:行IDについてではなく、各製品に固有の識別番号について説明しています)。一部の製品では、テーブルに2つのエントリがあります(両方とも同じIDです)。唯一の違いは、特別な列にあります(たとえば、列のCOLORはREDまたはGREENのいずれかになります)。
私がやりたいのは、COLOURの値に基づいて一意の製品のリストを作成することです。同じ製品に、GREENレコードとREDレコードの両方が存在する場合は、GREENが優先されます。
つまり、次のような場合です。
id PRODUCT ID COLOUR
1 1001 GREEN
2 1002 GREEN
3 1002 RED
4 1003 RED
SELECTで行1、2、4を返したいのですが、どうすればこれを実現できますか?
私の現在のアプローチは、別々のテーブルを用意し、手動で結合することですが、これは明らかに非常に悪い考えです。
注:ここから同じアプローチを使用しようとしました:
SELECT *
FROM xx
WHERE f_COLOUR = "GREEN"
UNION ALL
SELECT *
FROM xx
WHERE id not in (SELECT distinct id
FROM xx
WHERE f_COLOUR = "GREEN");
しかし、私が得ている結果は、1、2、4だけではなく、1、2、3、4行です。私は何が欠けていますか?
編集:もう1つ質問してください:これをレコードのサブセットで機能させるにはどうすればよいですか?テーブル全体ではなく、一部のレコードをフィルタリングしたい場合はどうすればよいですか?
たとえば、SELECT * FROM table WHERE productID LIKE "1%"のようなものがある場合、色の優先度(GREEN> RED)を尊重しながら、各一意の製品を取得するにはどうすればよいですか?