我想使用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的所有结果。
答案 0 :(得分:2)
您的JOIN
条件不完整,因此您实际上得到的是CROSS JOIN
,因为无论T_ID
和CAT_ID
都不是0还是NULL
都是{{ 1}}将会发生。尝试将它们更改为(假设JOIN
和ID
表中的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'