2014-01-07 3 views
1

У меня есть эти таблицы:MySQL как запросить сложные реляционные таблицы

enter image description here

Я хочу, чтобы показать статью, в которой его предмет, связанный термин «молоко».

subject_catalog словарь таблица:

index_key = primary key 
subject = takes any words 
rt_key = serves as 'related term' foreign key to its own. 

выборки данных для subject_catalog:

|index_key|subject|rt_key| 
|------------------------| 
| 1  | tea | null | 
| 2  | milk | 1 | 
|------------------------| 

образец данных для статьи:

|article_key|title  |pages| 
|----------------------------| 
| 1  | article_1| 5 | 
| 2  | article_2| 3 | 
|----------------------------| 

данных выборки для article_subject:

|article_key|index_key| 
|---------------------| 
| 1  | 1  | 
|---------------------| 

вот мой пробный запрос, но это обыкновение показывать любую статью:

SELECT 
    `article`.`title` 
FROM 
    `article_subject` 
    INNER JOIN `article` 
     ON (`article_subject`.`article_key` = `article`.`article_key`) 
    INNER JOIN `subject_catalog` 
     ON (`article_subject`.`index_key` = `subject_catalog`.`index_key`) 
    INNER JOIN `subject_catalog` AS `subject_catalog_1` 
     ON (`subject_catalog_1`.`rt_key` = `subject_catalog`.`index_key`) 
WHERE `subject_catalog_1`.`subject` LIKE 'milk%' 
+2

просто хочу сказать: ¡Спасибо за то, что вы так относитесь к своим столам! – Melon

ответ

2

Тест

SELECT article.title 
FROM article_subject 
    LEFT JOIN article USING (article_key) 
    LEFT JOIN subject_catalog USING (index_key) 
    LEFT JOIN subject_catalog sc2 ON subject_catalog.index_key = sc2.rt_key 
WHERE subject_catalog.subject LIKE 'milk%' OR sc2.subject LIKE 'milk%' 

http://sqlfiddle.com/#!2/7d5f5/3/0

+0

Извините, нет результата :( – borj

+0

У вас нет результата, потому что запись milc не имеет нужного индекса для любого предмета статьи – niyou

+0

У меня улучшена скрипт и добавили строку в article_subject, чтобы показать вам, как получить результат. Запрос правильный. – niyou

0
Select A.title from article A inner Join article_subject S 
On A.article_key =S.article_key inner join subject_catalog C 
on C.index_key = C.index_key where C.rt_key =1 

SQLFIDDLE

+0

Извините ни одного результата :( – borj

+0

@borj Молоко, связанное с темой или предметом начинается с этого слова «Молоко»? –

+0

«молоко» связано с темой «чай» и «чай» связано с «article_1» через таблицу статей. Я хочу использовать «молоко», чтобы показать «article_1». – borj

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