有三个表格如下:
tbSubSubKategorie:
ID Name
1 PodPodKategoria_1
2 PodPodKategoria_2
3 PodPodKategoria_3
4 PodPodKategoria_4
6 PodPodKategoria_5
tbSection
Id Name
2 Design
3 Wichtigste Eigenschaften der Stoffe
4 Pflegehinweis
5 Funktionen
6 Sitzkomfort
7 Abmessungen im Detail
8 Versand & Montage
9 Lieferumfang
tbSection_SubSubKategorie
Id FK_Section_ID FK_SubSubKategorie
2 2 2
5 6 2
7 2 3
8 7 3
10 5 2
11 5 3
13 8 NULL
15 3 2
在模型中,可能有一个部分可能与多个不同的子子类别相关联,或者第二个情况,当部分与任何子子类别没有关联时,则此部分将始终是一个在FK_SubSubKategorie字段中具有部分ID和空值的记录。
我现在想要获得的信息是从表tbSection_SubSubKategorie获取信息。我想获得信息:
tbSection_SubSubKategorie.Id,tbSectionId,tbSection.Name, FK_SubSubKategorie.Name
当section与sububkategorie的null相关联时,我遇到了问题。
我当前的查询是这样构建的:
SELECT CASE WHEN section_subsubkategorie.FK_SubSubKategorie IS NULL THEN 'section does not contain subsubkategorie' ELSE convert(varchar(10), section_subsubkategorie.FK_SubSubKategorie, 121) END AS IDX, *
FROM tbSection as section
INNER JOIN tbSection_SubSubKategorie as section_subsubkategorie ON section.Id = section_subsubkategorie.FK_Section_ID
INNER JOIN tbSubSubKategorie as subkategorie
ON section_subsubkategorie.FK_SubSubKategorie = subkategorie.Id OR section_subsubkategorie.FK_SubSubKategorie IS NULL
但结果不正确:
正如你在第8节中看到的那样,我看到4行,应该只有一行......我甚至尝试使用CASE,但仍然不是这个。你能帮忙吗?希望你明白我的意思。
答案 0 :(得分:0)
如果我理解正确你得到5行而你想要1.在这种情况下,在加入tbSubSubKategorie时使用defaultConfig {
applicationId "com.plante.android.cobalt"
minSdkVersion 17
targetSdkVersion 18
versionCode 7
multiDexEnabled false
versionName "7"
}
并删除LEFT JOIN
。
OR
答案 1 :(得分:0)
将您的上一个INNER JOIN
替换为LEFT JOIN
并删除OR
条款:
SELECT CASE WHEN section_subsubkategorie.FK_SubSubKategorie IS NULL THEN 'section does not contain subsubkategorie' ELSE convert(varchar(10), section_subsubkategorie.FK_SubSubKategorie, 121) END AS IDX, *
FROM tbSection as section
INNER JOIN tbSection_SubSubKategorie as section_subsubkategorie ON section.Id = section_subsubkategorie.FK_Section_ID
LEFT JOIN tbSubSubKategorie as subkategorie
ON section_subsubkategorie.FK_SubSubKategorie = subkategorie.Id
现在你只是在两个id匹配时才告诉它加入(因为第二个null
不匹配),或者将null
分别加入到每个id中,导致前6个ID中的每一个都出现重复的行。
LEFT JOIN
会保留原始行,只需将null
添加到FK_SubSubKategorie
字段,这样也可以让您的案例陈述适用于IDX
字段