SQLite 3 如何过滤 LEFT JOIN table 的关键字?
How to filter a key word of LEFT JOIN table in SQLite 3?
这个问题可能有点复杂。我用一个简单的例子来解释我的问题。我知道这些表结构不寻常。我的问题是关于 SQL 命令。
示例,3 个表:
参数表
P_ID ParaName_ID
1 1
2 2
3 3
ParaDescTable
P_ID ParaDesc_ID
1 4
2 5
3 6
语言表
String_ID StringValue
1 Name_Hello1
2 Name_2
3 Name_3
4 Desc_TEXT1
5 Desc_Hello2
6 Desc_TEXT2
如果我输入 SQL 命令:
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0
它将显示为:
P_ID ParaName_ID ParaName ParaDescription
1 1 Name_Hello1 Desc_Text1
2 2 Name_2 Desc_Hello2
3 3 Name_3 Desc_Text3
我想添加一个过滤功能,在 ParaName & ParaDescription 栏中搜索关键词 'Hello' 如下。
P_ID ParaName_ID ParaName ParaDescription
1 1 Name_Hello1 Desc_Text1
2 2 Name_2 Desc_Hello2
如何修改SQL命令?
非常感谢。
我从不使用 SQLite,但尝试使用 LIKE 子句
尝试
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0
AND (paraName LIKE '%Hello%' OR ParaDescription LIKE '%Hello%' )
也这样试试
select * from (
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0 ) as tt where paramName LIKE '%Hello%'
OR ParaDescription LIKE '%Hello%'
这个问题可能有点复杂。我用一个简单的例子来解释我的问题。我知道这些表结构不寻常。我的问题是关于 SQL 命令。
示例,3 个表:
参数表
P_ID ParaName_ID
1 1
2 2
3 3
ParaDescTable
P_ID ParaDesc_ID
1 4
2 5
3 6
语言表
String_ID StringValue
1 Name_Hello1
2 Name_2
3 Name_3
4 Desc_TEXT1
5 Desc_Hello2
6 Desc_TEXT2
如果我输入 SQL 命令:
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0
它将显示为:
P_ID ParaName_ID ParaName ParaDescription
1 1 Name_Hello1 Desc_Text1
2 2 Name_2 Desc_Hello2
3 3 Name_3 Desc_Text3
我想添加一个过滤功能,在 ParaName & ParaDescription 栏中搜索关键词 'Hello' 如下。
P_ID ParaName_ID ParaName ParaDescription
1 1 Name_Hello1 Desc_Text1
2 2 Name_2 Desc_Hello2
如何修改SQL命令? 非常感谢。
我从不使用 SQLite,但尝试使用 LIKE 子句
尝试
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0
AND (paraName LIKE '%Hello%' OR ParaDescription LIKE '%Hello%' )
也这样试试
select * from (
SELECT p.* ,
lang0.StringValue ParaName,
lang1.StringValue ParaDescription
FROM ParameterTable p
LEFT JOIN LangTable lang0
ON lang0.String_ID = p.ParaName_ID AND lang0.String_ID
LEFT JOIN ParaDescTable pt
ON pt.P_ID = p.P_ID
LEFT JOIN LangTable lang1
ON lang1.String_ID = pt.ParaDesc_ID AND lang0.String_ID
WHERE p.P_ID > 0 ) as tt where paramName LIKE '%Hello%'
OR ParaDescription LIKE '%Hello%'