2011-10-25 5 views
1

このクエリはそれから完全に離れて動作しますが、まだ空白のタイトルフィールドを返します。このクエリはまだ空のタイトルフィールドを返しますか?

SELECT 
    DISTINCT(TRIM(LEFT(title, 
    IF(LOCATE('10 Pack', title), LOCATE('10 Pack', title) - 1, 
    IF(LOCATE('100 Classic', title), LOCATE('100 Classic', title) - 1, 
    IF(LOCATE('100 Favourite', title), LOCATE('100 Favourite', title) - 1, 
    IF(LOCATE('DVD', title), LOCATE('DVD', title) - 1, 
    IF(LOCATE('Bluray', title), LOCATE('Bluray', title) - 1, 
    IF(LOCATE('Series', title), LOCATE('Series', title) - 1, 
    IF(LOCATE('20 ', title), LOCATE('20 ', title) - 1, 
999)))))))))), 
    main_category, 
    genre, 
    actors 
FROM 
    PRprodINFO 
WHERE 
    ((main_category = 'Films') 
    AND (length(title) > 2)) 
GROUP BY title 

も試してみました:

SELECT 
    DISTINCT(TRIM(LEFT(title, 
    IF(LOCATE('10 Pack', title), LOCATE('10 Pack', title) - 1, 
    IF(LOCATE('100 Classic', title), LOCATE('100 Classic', title) - 1, 
    IF(LOCATE('100 Favourite', title), LOCATE('100 Favourite', title) - 1, 
    IF(LOCATE('DVD', title), LOCATE('DVD', title) - 1, 
    IF(LOCATE('Bluray', title), LOCATE('Bluray', title) - 1, 
    IF(LOCATE('Series', title), LOCATE('Series', title) - 1, 
    IF(LOCATE('20 ', title), LOCATE('20 ', title) - 1, 
999)))))))))), 
    main_category, 
    genre, 
    actors 
FROM 
    PRprodINFO 
where 
    ((main_category = 'Films') 
    AND (title <> '')) 
GROUP BY title 

まだ空白のタイトルフィールドの行が返されます...任意のアイデアなぜですか?

おかげ

ダレン

+0

'PRprodINFO'テーブルの典型的な行の例を挙げることができますか?特に 'title'カラム。また、あなたの質問の目標は何ですか? – ObscureRobot

答えて

0

フィールドは、LOCATE(astr, field)はnullを返しますnullある場合。 titleがnullでないことを確認する必要があります。
どちらかどこでもまたは実行COALESCE(title)titleを置き換える:あなたが持っている場合は

SELECT DISTINCT(TRIM(LEFT(i.title, 
    IF(LOCATE('10 Pack', i.title), LOCATE('10 Pack', i.title) - 1, 
    IF(LOCATE('100 Classic', i.title), LOCATE('100 Classic', i.title) - 1, 
    IF(LOCATE('100 Favourite', i.title), LOCATE('100 Favourite', i.title) - 1, 
    IF(LOCATE('DVD', i.title), LOCATE('DVD', i.title) - 1, 
    IF(LOCATE('Bluray', i.title), LOCATE('Bluray', i.title) - 1, 
    IF(LOCATE('Series', i.title), LOCATE('Series', i.title) - 1, 
    IF(LOCATE('20 ', i.title), LOCATE('20 ', i.title) - 1,999)))))))))) 
    , i.main_category, i.genre, i.actors 
FROM (SELECT main_category, genre, actors, COALESCE(title,'') as title 
     FROM PRprodINFO) i 
WHERE ((i.main_category = 'Films') AND (length(i.title) > 2)) 
GROUP BY i.title 
0

を私はあなたのWHERE句...代わりにあなたの

AND (title <> '') 

AND Length(TRIM(NVL(title, ''))) > 2 

に以下を追加します任意のNULL値、それらはそれを捨てるでしょう。さらに、タイトルが ""の値を持つならば、それも偽陽性を与える可能性があります。したがって、NVL()(NULL値の場合は '')を使用してトリミングし、次に長さをチェックする...あなたのニーズに合ったものをすべて取得する必要があります。

0

大量のIFブロックを変更して、条件が満たされていないときにtitleを返すようにしてください。結果は何ですか?

SELECT 
    DISTINCT(TRIM(LEFT(title, 
    IF(LOCATE('10 Pack', title), LOCATE('10 Pack', title) - 1, 
    IF(LOCATE('100 Classic', title), LOCATE('100 Classic', title) - 1, 
    IF(LOCATE('100 Favourite', title), LOCATE('100 Favourite', title) - 1, 
    IF(LOCATE('DVD', title), LOCATE('DVD', title) - 1, 
    IF(LOCATE('Bluray', title), LOCATE('Bluray', title) - 1, 
    IF(LOCATE('Series', title), LOCATE('Series', title) - 1, 
    IF(LOCATE('20 ', title), LOCATE('20 ', title) - 1, 
999)))))), title)))), 
    main_category, 
    genre, 
    actors 
FROM 
    PRprodINFO 
where 
    ((main_category = 'Films') 
    AND (title <> '')) 
GROUP BY title 
関連する問題