2014-02-04 1 views
0

Мне нужно написать инструкцию SQL из трех таблиц, таблицу с перечислением веб-URL, таблицу с указанием возможных категорий, а затем таблицу URL_Categories. (Подобно классической проблеме SQL/Classes/Enrollment SQL). Сочетание URL и CATEGORY делает URL_CATEGORIES. Один URL может иметь 1 или «X» категории, поэтому в таблице URL_CATEGORY может быть несколько строк, но COMBINATION URL и CATEGORY уникальны в таблице URL_CATEGORY. Применяемые определения CREATE TABLE:SQL - Избегайте декартового продукта

CREATE TABLE URL (
    ID AUTOINC, 
    SOURCE_DATE DATETIME, 
    SITE VARCHAR(30), 
... 
); -186 rows 


CREATE TABLE CATEGORY (
    ID AUTOINC, 
    CATEGORY_NAME VARCHAR(20), 
); -- 9 rows 

CREATE TABLE URL_CATEGORIES (
    URL_ID INTEGER, 
    CAT_ID INTEGER, 
); - 195 rows 

Короче говоря, я хочу видеть все столбцы. Поскольку URL_CATEGORIES имеет 195 строк, мой OUTPUT должен иметь 195 строк. Для каждой строки таблицы URL_CATEGORIES выберите все соответствующие столбцы в таблице URL, где URL_CATEGORIES.URL_ID = URL.ID и все столбцы в таблице CATEGORY, где URL_CATEGORIES.CAT_ID = CATEGORY.ID.

SQL, я использую дает мне 38025 строк, говорит мне, что есть декартово вопрос ... SQL, является

select U1."*", C2."*", U3."*" 
    from "URL_CATEGORIES" U1 
inner join "CATEGORY" C2 
    on (U1."CAT_ID" = C2."ID"), 
     "URL_CATEGORIES" U1 
inner join "URL" U3 
    on (U1."URL_ID" = U3."ID") 

Я имею в виду, мне нужно подвыбор, чтобы получить строки на 3 таблицы , а не соединение. Как мне переписать мой SQL?

Благодаря

ответ

2

У вас есть запятая в from заявлении, и вы снова обратитесь к url_categories, так что вы получаете декартово произведение. Запрос интерпретирует это как cross join. Попробуйте следующее:

select U1.*, C2.*, U3.* 
from URL_CATEGORIES U1 inner join 
     CATEGORY C2 
     on U1.CAT_ID = C2.ID inner join 
     URL U3 
     on U1.URL_ID = U3.ID 

Двойные кавычки для этого запроса не нужны.

+0

Это сделало это ... одна дополнительная запятая может вызвать много обострения ... LOL – user1009073