2015-08-25 3 views
0

У меня есть две таблицы: output_hash и baseline. Номер output_hash содержит plot_id. baseline содержит plot_number. Первые 6 цифр plot_id состоят из plot_number. Как найти пересечение между plot_id в output_hash и plot_number в baseline? Я хочу, чтобы результат был plot_number (не baseline). Поэтому, чтобы быть понятным, значение plot_id содержит plot_number.найти пересечение, где должен быть определен один набор

Так что если 111234_5 были в plot_id и 111234 был в plot_number, я хотел бы его в моем результате. Но если 222345_2 был в plot_id, но не plot_number не начал с 222345, то это не должно быть в результате (аналогично, если 222345_2 был в plot_id, но не plot_number не начал с 222345, то 222345 остались бы из результата).

ответ

1

Один из способов будет использовать оператор exists с like оператором в подзапросе:

SELECT * 
FROM output_hash o 
WHERE EXISTS (SELECT * 
       FROM baseline b 
       WHERE o.plot_id LIKE b.plot_number || '%') 
+0

Это будет возвращать все строки в случае, если 'b.plot_number' равно null, потому что результат' concat() 'будет'% 'тогда. Возможно, лучше использовать '||', так что результат конкатенации будет также «null». –

+0

@a_horse_with_no_name Я забыл про предостережение 'concat' - спасибо! Отредактировано соответственно. – Mureinik

0

ВЫБОР * ОТ output_hash РЕГИСТРИРУЙТЕСЬ базовой ON SUBSTR (plot_id, 1, 6) = plot_number: :ТЕКСТ;

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