2015-11-18 2 views
1

В среде разработки с SQLite 3.7.11 и Java, несмотря на то, прочитайте следующие ответы:Использование в операторе с SQLite

я отыскания использование статьи SQLite IN не очень прямолинейно.

Предположим простую таблицу TEST со следующей структурой:

---------------------------- 
id  PRODUCT  TAG 
(int) (text)  (text) 
---------------------------- 
1  Cinthol  Soap, Bath, Cleaning 
2  Vim   Dishwash, Kitchen, Cleaning 
3  Burger  Food, Breakfast, Lunch, Dinner 

Следующие запросы ведут себя таким образом:

---------------------------------------------------------------------------- 
Query             Result  Expected 
---------------------------------------------------------------------------- 
SELECT PRODUCT FROM TEST WHERE TAG IN('Soap')   Cinthol Cinthol 
SELECT PRODUCT FROM TEST WHERE TAG IN('Dinner')  <EMPTY> Burger 
SELECT PRODUCT FROM TEST WHERE TAG IN('Soap', 'Bath') <EMPTY> Cinthol 
SELECT PRODUCT FROM TEST WHERE TAG IN('Cleaning')  <EMPTY> Cinthol, Vim 

Так вопросы:

  • За исключением первой запрос, почему другие не дают ожидаемых результатов? Есть что-то принципиально неправильное в понимании?
  • Если неверно, какой правильный запрос получить ожидаемые результаты (без использования функции instr)?

Кроме того, столбец TAG в конечном итоге должен быть связан с массивом токенов в Java, построив запрос динамически. Однако перечисленные выше ответы имеют указатели на это.

Заранее благодарен!

+2

лучшим решением является нормализация базы данных ... также все ожидаемое значение должно be 'empty' – Selvin

+0

доказательство, что должно быть пустым: http://sqlfiddle.com/#!7/0c8a60/2 – Selvin

+0

' IN' видит, что вещь слева содержится в списке справа; если одна из «составляющих» предмета слева указана справа. – TripeHound

ответ

1

В этом случае это не работает. Если у вас есть один TAG каждый столбец, вы можете получить результаты. Вам нужно добавить другую таблицу, чтобы сохранить ваши метки. В этой таблице вам нужен pk, внешний ключ (id deom тесты) и тег, чтобы у вас было многозадачность для каждого продукта. Это решение, которое вы можете сделать другим. У вас была лучшая поисковая база данных notmalization first.gl

+0

Другими словами: ему нужно как минимум 3 стола ... – Selvin

+0

Хорошо, ребята, потратите некоторое время на понимание «нормализации» и, надеюсь, с решением. Однако посмотрите [Ответ 1] (http://stackoverflow.com/questions/7418849/in-clause-and-placeholders). Его принятый ответ, и это бьет меня, почему мои запросы, которые находятся на очень похожих линиях, терпят неудачу. Спасибо, оба! –

+1

@NarayanaJ IN требует единственного значения с левой стороны. –

Смежные вопросы