Если ваши таблицы являются таблицами типов сущностей, например, a
являются лицами, а b
являются компаниями, я не думаю, что вы можете избежать декартового произведения, если будете искать результаты в этом способ (одиночный запрос).
Вы говорите, что хотите найти во всех таблицах определенное слово, но, вероятно, хотите разделить результаты на соответствующие типы. Правильно? В противном случае поиск в Интернете не будет иметь большого смысла.
Поэтому, если вы ищите «Джо», вы захотите увидеть людей с именем «Джо» и, например, компанию «Джо». Поскольку вы ищете разные объекты, вы должны разделить поиск по разным запросам.
Если вы действительно хотите сделать это в одном запросе, вам придется изменить структуру базы данных, чтобы приспособить ее. Вам понадобится некоторая форма «таблицы поиска», содержащая идентификатор сущности (PK) и тип сущности, а также список ключевых слов, по которым вы хотите найти эту сущность. Например:
EntityType, EntityID, Keywords
------------------------------
Person, 4, 'Joe', 'Doe'
Company, 12, 'Joe''s Gym', 'Gym'
Что-то подобное?
Однако отличается, когда ваш поиск возвращает только один тип сущности, скажем Person, и вы хотите вернуть Person, для которых вы получили совпадение по этому ключевому слову (в любой связанной таблице с этим Person ). Затем вам нужно будет выбрать все поля, которые вы хотите показать, и сгруппировать их, оставляя поля, в которых вы ищете. Включение их неизбежно приводит к декартовому произведению.
Кстати, я тут просто мозговой штурм. Надеюсь, что это полезно.