2015-12-04 4 views
0

Я хочу выбрать из нескольких таблиц на основе значения из первой таблицы. Как использовать значение a.property_type в качестве имени таблицы?Значение столбца SQL как имя таблицы

SELECT * from properties a 
//LEFT JOIN caracteristics_apartments 
LEFT JOIN caracteristics_+a.property_type b 
ON a.property_id = b.property_id 
WHERE a.property_id = 1 

Так что, если у меня есть запись в свойствах:

id_property: 1 
property_name: Apartment 3 rooms 
property_type: apartment 

тогда я использую значение из property_type выбрать из другой таблицы с именем apartment_characteristics (составленный property_type + «_characteristics»), чтобы получить собственность характеристики.

ответ

-2

(ред) Это нормально для соединения, SO, пожалуйста, не считают этот ответ:

Выбрать a.property_type как property_type, b.property_value как property_value из Property_table_a а, б Property_table_b где a.property_id = b.property_id

Для левого внешнего соединения или правое внешнее соединение, вы используете:

где a.property_id = b.property_id (+)

Это в основном предпочтительнее в базе данных Oracle.

2

Обычно это признак того, что дизайн базы данных неправильно нормализуется и может выполнять некоторые рефакторинги, чтобы объединить поля ядра, к которым вы пытаетесь объединиться, в одну когерентную таблицу; Я бы посмотрел на это как первый порт захода.

В противном случае - невозможно, чтобы один и тот же запрос соединялся в разных таблицах для разных строк, все они должны присоединиться к одному месту. Вы можете построить динамический запрос во время выполнения, чтобы выбрать из каждой отдельной таблицы, но опять же это не очень хорошая идея на практике; он может быть довольно хрупким и медленным.

Если вы действительно должны сделать что-то вдоль этих линий, что вам нужно, чтобы присоединиться к оставляются РЕГИСТРИРУЙТЕСЬ от всех возможных таблиц для псевдонима б (побочное замечание - содержательное namaes сделать вещи намного проще отлаживать, чем, b, c и т. д.), затем используйте COALESCE, чтобы объединить их значения, чтобы объединить их столбцы в одну форму. Но я бы этого не сделал; код, вероятно, будет огромным и громоздким, и приложение не будет особенно ясным, какой бит данных пришел откуда.

+0

Я пошлю вашу первую идею. Я не проектировал базу данных таким образом, но я был предназначен. Теперь я отменим эту идею. Проблема в том, что у меня есть главная таблица со свойствами, а для каждого типа свойства - набор характеристик. Например, квартиры имеют 10, земли имеют 3, дом - 6. Всего 19 колонн. Все нормально, но только когда я вставляю землю 16, будет null или 0, и мне это не нравится. Можете ли вы дать мне подсказку? –

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