2013-11-26 3 views
0

Например, если у меня есть эти три таблицы в базе данных MySQL:Регистрация более двух таблиц на той же самой колонке

Таблица 1: wood_items (колонны: wood_item_id, item_name, ширина, высота, толщина, цена)

Таблица 2: other_items (столбцы: other_items_id, item_name, цена)

Таблица 3: транзакции (столбцы: TRANSACTION_ID, item_id, цена)

Я хочу присоединиться к транзакции таблицы с обеими wood_items и other_items стола на тему ITEM_ID, поэтому он будет отображать все транзакции сделали (столбцы для отображения: TRANSACTION_ID, item_name, цены), независимо будь то wood_item или другой_итем. Вероятно, это аналогичная концепция для наследования в Java, поскольку оба из wood_items и other_items должны быть a.

Возможно ли это? Если да, то как; но если я не могу, то лучший способ создать подобную структуру/результат?

+0

Какие поля вы хотите получить от запроса? –

+0

@FilipeSilva Я полностью забыл поставить вопрос. Исправлен вопрос. Это transaction_id, item_name и цена. Благодаря! – Vhutama

+0

проверить мой ответ с UNION, который он должен соответствовать вашим потребностям – ceyquem

ответ

3

Я бы реструктурировал ваши столы, если вы можете, так как там должен быть только один стол items, и вы можете, конечно, иметь другой стол для categories, как «дерево».

В противном случае вы можете использовать LEFT JOIN, чтобы удалить требование о наличии соответствующего индекса на и таблиц.

SELECT cols FROM 
transaction 
LEFT JOIN wood_items ON (wood_item_id = item_id) 
LEFT JOIN other_items ON (other_items_id = item_id) 
WHERE 
    -- Ensures that there is a match in at least one of the tables 
    wood_item_id IS NOT NULL 
    OR other_items_id IS NOT NULL 
0

Вы можете сделать UNION между wood_items и other_items после JOIN, но для этого нужно иметь фиксированное число столбцов между деревом и другим, что-то, как это должно работать, если вы выбрали только столбец «ID» (я добавил поле типа, чтобы сделать разницу между которыми столом она исходит от):

(SELECT T.transaction_id, T.item_id, T.price, W.item_name AS item_name, W.price AS item_price 
FROM transaction T 
LEFT JOIN wood_items W ON W.wood_items.wood_item_id = T.transaction.item_id) 
UNION (SELECT T.transaction_id, T.item_id, T.price, , O.item_name AS item_name, O.price AS item_price 
FROM transaction T 
LEFT JOIN other_tiems O On O.other_items.other_items_id = T.transaction.item_id); 

Edit: я добавил поле, нужно, он должен работать, как вы хотите.

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