我正在学习 SQL 并一直在处理这个查询:
SELECT
[Theme].[Name], [ThemeType].[Type]
FROM
[Theme]
LEFT OUTER JOIN
[ThemeType] ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType]
JOIN
[ProductTheme] ON [ProductTheme].[ThemeId]=[Theme].[PK_Theme]
WHERE
ProductTheme.ProductID LIKE '%'
AND ProductTheme.ThemeId = Theme.PK_Theme
AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%[0-9]%'
ORDER BY
CASE WHEN [THEMETYPE].[TYPE] IS NULL
THEN 0
ELSE 1
END,
[THEMETYPE].[TYPE]
有两个部分需要可变。两者都是 LIKE 语句。
第二个效果很好,我可以将其更改为 %、Null 或 %[0-9]% 以获取全部、仅空值或仅非空值
第一个在专门分配时可以正常工作:
WHERE ProductTheme.ProductID = 1
但是,当我这样做时,我也需要它是可变的,允许特定数字或所有数字:
WHERE ProductTheme.ProductID LIKE '%'
我得到重复:
我该如何解决?
编辑:表格的样本数据:
主题表:
产品表:
产品主题表: