2011-06-22 1 views
0

列がword, length, position, count and definitionのテーブルがあります。 worddefinitionを選択し、いくつかの単語(positioncountlengthを超える条件に基づいて)の定義を保持し、残りの定義を空の文字列で置き換えます。SQL/SQlite:別の列の値に基づいてselect文に列を追加する

私は次のクエリやってる:

SELECT word,definition FROM (SELECT word, definition, position, count FROM words 
WHERE position = 5000 AND count < 5 AND length <= 6 
AND definition IS NOT NULL 
UNION ALL 
SELECT word, "" AS definition, position, count FROM words) 
ORDER BY position ASC, count DESC 

をしかし、私は、列の単語で重複してしまいます。
重複した値を使用しないでこれを取得するにはどうすればよいですか?

答えて

1

は句あなたの第二の組に逆を追加しますか?

SELECT word,definition FROM 
(
    SELECT word, definition, position, count FROM words 
    WHERE position = 5000 AND count < 5 AND length <= 6 
    AND definition IS NOT NULL 
UNION ALL 
    SELECT word, "" AS definition, position, count FROM words 
    WHERE NOT (position = 5000 AND count < 5 AND length <= 6 
      AND definition IS NOT NULL) 
) 
ORDER BY position ASC, count DESC 
+0

なぜ 'CASE WHEN(条件)を使用していないのですか? – Benoit

0

SELECT DISTINCTはあなたの問題を解決するようです。

http://www.w3schools.com/sql/sql_distinct.asp

+1

何行が複製されていないので、いいえ、DISCTINCTは、ここでは動作しません。私は列の単語に重複した値を取得します。 – Damian

+0

私はすぐにあなたのSELECTに赤です。 – VGE

0

あなたはgroup by句を使用することができます....

0

あなたのケースでは、UNION SELECTの使用は役に立たないようです。 NULLの場合は、定義列を初期化するだけです。 定義は出力の一部に過ぎません。

は、定義を初期化するためにifnullを使用します。

SELECT word, IFNULL(definition,"") FROM words 
    WHERE position = 5000 AND count < 5 AND length <= 6 
ORDER BY position ASC, count DESC 

IFNULLは定義が定義がそうでなければNULLと "" ではないですが返されます。

のSQLite ISNULLドキュメント http://www.sqlite.org/lang_corefunc.html

MYSQL ISNULLドキュメント: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

+1

可能であれば、可変数の引数を持つことができる 'COALESCE()'をIFNULLよりも好むかもしれません(そして、SQLiteのドキュメント(http://sqlite.org/lang_corefunc.html)にリンクしてください)。 MySQLではなく、タグ付きSQLite) – Benoit

関連する問題