2013-03-18 2 views
1

Как я могу использовать предложение CONTAINS для поиска из 2 столбцов таблицы. Например: - скажем, у меня есть таблица с именем CONTACT. Он содержит столбцы как FIRST_NAME, LAST_NAME, USERNAME, EMAIL и т.д.Использование предложения Oracle CONTAINS для 2 столбцов

Теперь, если я хочу, чтобы найти строку, скажем, «ABCD» в колонке USERNAME используя СОДЕРЖИТ пункт, я буду писать:

SELECT * 
FROM CONTACT 
WHERE (CONTAINS(USERNAME, 'ABCD', 1)> 0); 

Это дает мне желаемый результат. Но что, если мне нужно искать строку на 2 столбца? Я попытался использовать: -

SELECT * 
FROM CONTACT 
WHERE (CONTAINS(USERNAME, 'ABCD', 1)> 0) 
AND (CONTAINS(FIRST_NAME, 'ABCD', 1)> 0); 

Но это дает мне ошибку. Пожалуйста, помогите мне с этим.

PS: Индексы на столбцах были созданы, как требуется для использования предложения CONTAINS.

+1

Не можете оставить сообщение? – JWK

+0

ORA-29907: найдены дубликаты меток в первичных вызовах 29907. 00000 - «найдены дубликаты меток в первичных вызовах» * Причина. Существует несколько первичных вызовов операторов с на том же номере, что и метка. * Действие: используйте отдельные метки в первичных вызовах. – paras2682

ответ

3

Ярлык не является уникальным, попробуйте:

SELECT * 
FROM CONTACT 
WHERE (CONTAINS(USERNAME, 'ABCD', 1)> 0) 
AND (CONTAINS(FIRST_NAME, 'ABCD', 2)> 0); 
+0

JWK: thanx для этого. Сейчас это работает. Но можете ли вы подробнее рассказать о том, что является логикой этого? – paras2682

+0

Oracle нуждается в отслеживании результатов и для этого требуется уникальный ярлык. Таким образом, вы можете использовать счет еще где-либо в SQL-заявлении, например, в части выбора. – JWK

+0

Но будет ли это иметь значение, если я поменяю партитуры. Или сказать, что я ищу только на USERNAME и использую 2 в качестве оценки? – paras2682

3

На самом деле, если вы используете содержит пункт более чем один раз, то вы можете пропустить ярлык:

SELECT * FROM CONTACT WHERE (CONTAINS(USERNAME, 'ABCD')> 0) AND (CONTAINS(FIRST_NAME, 'ABCD')> 0);

Он автоматически добавляет этикетки.

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