Как: MySQL Как получить запись на основе трех свойств? - PullRequest
0 голосов
/ 19 февраля 2009

Я новичок в 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 содержит допустимые длины, которые может принимать тело (и аналогично другим таблицам).

Ответы [ 3 ]

2 голосов
/ 19 февраля 2009

Из одного стола:

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 голосов
/ 19 февраля 2009

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

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", и вы удалили его.

0 голосов
/ 19 февраля 2009

Ваша схема БД мне не понятна.

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

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

Пожалуйста, уточните.

...