0

私は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] 

変数にする必要がある部分が 2 つあります。どちらも LIKE ステートメントです。

2番目のものは完璧に機能します。%、Null、または %[0-9]% に変更して、すべて、nullのみ、またはnull以外のみを取得できます

最初のものは、具体的に割り当てられている場合に正常に機能します。

WHERE ProductTheme.ProductID = 1

ここに画像の説明を入力

ただし、これを行うときは、これを可変にして、特定の数またはすべての数を許可する必要があります。

WHERE ProductTheme.ProductID LIKE '%'

私は繰り返しを得ています: ここに画像の説明を入力

これを修正するにはどうすればよいですか?

編集: テーブルのサンプル データ:

テーマ表:

ここに画像の説明を入力

製品表:

ここに画像の説明を入力

製品テーマ表:

ここに画像の説明を入力

4

1 に答える 1

1

私の頭に浮かぶ最も簡単な修正は、DISTINCT次のように SELECT の直後に句を挿入することです

SELECT DISTINCT [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]

私はそれをテストしていませんが、あなたの出力から判断すると、うまくいくはずです。

于 2013-07-29T15:29:23.847 に答える