左联接中联接字段上的“位置”

时间:2019-04-16 07:05:43

标签: mysql sql

我想使用LEFT JOIN进行自我联接,但是现在我想联接另外2个表并在联接表的字段2上添加一个where.data表包含一个自我引用到他的父母的ID。我想获取给定CATEGORY和TYPE的子名称和父名称。我尝试了以下请求:

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'

但是ou的结果是相同的,但没有“ where”,这意味着我得到所有CATEGORY和所有TYPE的所有结果。

2 个答案:

答案 0 :(得分:2)

您的JOIN条件不完整,因此您实际上得到的是CROSS JOIN,因为无论T_IDCAT_ID都不是0还是NULL都是{{ 1}}将会发生。尝试将它们更改为(假设JOINID表中的TYPE列称为CATEGORY

ID

答案 1 :(得分:1)

请在加入时更正您的加入条件

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'