2009-02-19 5 views
0

Я новичок в SQL и реляционных СУБД. Я хочу получить записи из реляционной базы данных, если они удовлетворяют 3 заданным свойствам.Практическое руководство. Как получить запись на основе трех свойств?

Например, если есть таблица, содержащая информацию о твердых телах:

table_solid : |s_id|s_name|description| 
table_width : |w_id|w_name| 
table_height: |h_id|h_name| 
table_length: |l_id|l_name| 

где * _id все первичные ключи.

У меня есть еще 3 таблицы для связывания этих таблиц с внешними ключами.

table_s_h: |s_id|h_id| 
table_s_w: |s_id|w_id| 
table_s_l: |s_id|l_id| 

Не могли бы вы объяснить, как я могу присоединиться к ним.

Заранее спасибо.

    --------- table_length 
table_SOLID ---- 
       ----------- table_width 

       ------------table_height 

table_length содержит допустимые длины, которые может принимать твердое тело (и аналогично другим таблицам).

+0

Что описывают эти таблицы? Их структура и названия их полей не очень ясны. –

+0

Я думаю, что вам лучше использовать одну таблицу с 5 или 6 столбцами. 5 столбцов будут «s_name», «description», «w_name», «l_name» и «h_name»; шестой может быть идентификатором для объекта. В результате вы, похоже, слишком нормализовались и столкнулись с проблемами. –

ответ

2

Из одной таблицы:

Select * 
FROM TABLE_NAME 
WHERE table_width = SOME_VALUE3 
AND table_height= SOME_VALUE2 
AND table_length = SOME_VALUE3 

Это то, что вы ищете? Или вы пытаетесь запросить несколько таблиц? Если это так, попробуйте следующее:

Select * 
FROM TABLE_SOLID solid 
Inner join table_width width on solid.w_id = width.w_id 
inner join table_height height on solid.h_id = height.h_id 
inner join table_length length on solid.l_id = length.l_id 

Эта ссылка может быть полезна для вас http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

Да, я хочу запросить несколько таблиц. –

0

Ваша DB схема не ясно для меня.

Эти четыре разных стола? Если да, то как они связаны, т. Е. Как вы извлекаете ширину, высоту, длину для данного твердого тела?

Или эти четыре столбца в 1 таблице, идентифицированные s_id?

Просьба уточнить.

0

Надеюсь, я понял вашу схему.

SELECT 
    s.* 
FROM 
    table_solid AS s 
WHERE 
    s.s_id IN 
(
(SELECT s_id FROM table_s_h INNER JOIN table_height USING (h_id) WHERE h_name = H) 
INTERSECT 
(SELECT s_id FROM table_s_w INNER JOIN table_width USING (w_id) WHERE w_name = W) 
INTERSECT 
(SELECT s_id FROM table_s_l INNER JOIN table_length USING (l_id) WHERE l_name = L) 
); 

OT: Я не знаю, если это будет работать в MySQL, и я не волнует - я добавил «MySQL» тег на вопрос и вы удалили его.