"где" в поле соединения в левом соединении - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел бы сделать самостоятельное соединение, которое я использовал с помощью LEFT JOIN, но теперь я хотел бы соединить 2 другие таблицы и добавить символ where в 2 поля объединенной таблицы. Таблица данных содержит собственную ссылку на его родительский ID. Я хотел бы получить имя ребенка И имя родителя для данной КАТЕГОРИИ и ТИПА. Я попробовал следующий запрос:

SELECT d1.NAME as NAME, d1.Parent as Parent, d2.NAME as PARENT_NAME 
FROM data as d1 LEFT OUTER JOIN data as d2 ON d1.PARENT = d2.ID 
        JOIN TYPE ON d1.T_ID
        JOIN CATEGORY ON d1.CAT_ID
        WHERE TYPE_NAME = 'Name'
        AND CAT_NAME = 'Name'

Но результат тот же, что и у вас без "где", означающего, что я получаю весь результат для всей КАТЕГОРИИ и всего ТИПА.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Ваши условия JOIN являются неполными, поэтому вы фактически получаете CROSS JOIN вместо этого, поскольку там, где T_ID и CAT_ID не равны 0 или NULL a JOIN, произойдет. Попробуйте изменить их на (при условии, что столбцы ID в таблицах TYPE и CATEGORY называются ID):

JOIN TYPE ON d1.T_ID = TYPE.ID
JOIN CATEGORY ON d1.CAT_ID = CATEGORY.ID
1 голос
/ 16 апреля 2019

Пожалуйста, исправьте ваше условие присоединения на момент присоединения

SELECT d1.NAME as NAME, d1.Parent as Parent, d2.NAME as PARENT_NAME 
FROM data as d1 
LEFT OUTER 
JOIN data as d2 ON d1.PARENT = d2.ID 
JOIN TYPE ON d1.T_ID **= someColumn**
JOIN CATEGORY ON d1.CAT_ID  **= someColumn**
WHERE TYPE_NAME = 'Name'
AND CAT_NAME = 'Name'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...