Используйте exists
или join
:
select b.*
from b
where exists (select 1
from tablea a
where b.name regexp concat(a.name, '[0-9]*')
);
Так вы указали регулярное выражение. Если вы не хотите 'First'
, используйте:
where exists (select 1
from tablea a
where b.name regexp concat('^', a.name, '[0-9]+')
);
A private static
метод отдельно не нарушает ООП по сути, но когда у Вас есть много этих методов на классе, для которых не нужно (и не может*), поля экземпляра доступа, Вы не программируете в OO путь, потому что "объект" подразумевает состояние + операции на том состоянии, определенном вместе. Почему Вы помещаете эти методы на тот класс, если им не нужно никакое состояние?
(*) = В принципе, из-за видимости уровня класса в Java, статический метод для класса имеет доступ к полям экземпляра объекта того класса, например:
class Test
{
int field = 123;
private static void accessInstance(Test test)
{
System.out.println(test.field);
}
}
Необходимо передать в ссылке на экземпляр (this
указатель), самостоятельно, конечно, но затем Вы по существу имитируете методы экземпляра. Просто упомянув это для полноты.
Как упомянуто выше, частные статические методы часто полезны для организации снова использованной логики и сокращения/устранения повторного кода. Я удивлен, что не заметил упоминания о производительности в этом обсуждении. От Renaud Waldura 'Финал Word на Финале':
(Примечание, частные статические методы являются неявно окончательными),
"Так как последний метод только реализован в классе объявления, нет никакой потребности динамично отправить вызов последнему методу, и статический вызов может использоваться вместо этого. Компилятор может испустить прямой вызов метода, обойдя полностью обычную виртуальную процедуру вызова метода. Из-за этого последние методы являются также кандидатами на встраивание Своевременным компилятором или подобным инструментом оптимизации. (Помните, частные / статические методы являются уже окончательными, поэтому всегда рассматриваемые для этой оптимизации.)"
Проверьте целую бумагу: http://renaud.waldura.com/doc/java/final-keyword.shtml
частный или общедоступный не имеет значения - статические методы в порядке, но если Вы находите использование их все время (и конечно методы экземпляра, которые не получают доступ ни к каким полям экземпляра, в основном статические методы с этой целью), затем, вероятно, необходимо заново продумать дизайн. Это не всегда возможно, но большую часть времени методы должны находиться с данными, на которые они воздействуют - это - основная идея об ООП.
Я не обязательно вижу какую-либо настоящую проблему с тем, что Вы делаете, но мой первый вопрос состоял бы в том, если метод не требует доступа ни к каким полям экземпляра, то, что это делает в том классе во-первых?
Это - вопрос вкуса, но я делаю методы, которые не реагируют на состояние в объектных помехах. Таким образом, я не должен переписывать код, если для статической функции нужна схожая функциональность. Функция сортировки была бы хорошим примером такого случая.
Я склонен не использовать частные статические методы. Я действительно использую общедоступные статические методы и группирую их в классы Util для продвижения повторного использования.
Частные статические методы могут, например, воздействовать на частных статических членов своего класса. Это может быть использовано, чтобы инкапсулировать и объединить определенный класс определенные операции.
Главный недостаток использования статических методов является, по-моему, тем, что каждый выбрасывает возможность переопределить. Так как классы в Java не похожи, скажем, на классы в Smalltalk, Вы не можете переопределить статические методы.
Так как Ваш вопрос касается частных статических методов, переопределение вне опции так или иначе.
Я склонен использовать статические методы только в случае служебных классов (как java.lang. Математика) или шаблоны как Шаблон "одиночка". Все они требуют более высокой видимости, чем частный, потому что они представляют услуги, предоставленные их классом другим.
Последняя мысль: Если у Вас есть один или несколько частных статических методов, думайте об извлечении их к специализированному служебному классу и обнародовать их. Еще лучше сделайте их методами экземпляра и используйте Шаблон "одиночка".