我需要根据下面的表模式构造一个SQLite语句。 ParentEventInfoID映射到同一个表中的其他项。
表名称EventInfo: _id,Name,Description,ParentEventInfoID,SortId
查询需求的部分要求在名称和描述上执行where子句,我没有遇到任何问题:
SELECT * FROM EventInfo
Where Name LIKE "%search text%" OR
Description LIKE "%search text%"
ORDER BY SortId;
我遇到问题的部分是我还需要包含条目的父项。下面的语句返回LIKE的所有匹配项,但只返回一个父项,即使我知道我应该有更多:
SELECT * FROM EventInfo
Where Name LIKE "%search text%" OR
Description LIKE "%search text%" OR
_id = (SELECT ParentEventInfoID FROM EventInfo
Where (Name LIKE "%search text%" OR
Description LIKE "%search text%")
ORDER BY SortId
我有一段时间没有做过大量的SQL,我感觉非常生疏。任何帮助是极大的赞赏。谢谢!
答案 0 :(得分:1)
试试这个
SELECT * FROM EventInfo
Where Name LIKE "%search text%" OR
Description LIKE "%search text%" OR
_id IN (SELECT ParentEventInfoID FROM EventInfo
Where (Name LIKE "%search text%" OR
Description LIKE "%search text%")
ORDER BY SortId
但是应该有更好的查询来避免内部查询中的like子句。
答案 1 :(得分:0)
您可以使用SELF JOINS
SELECT E1.* FROM EventInfo E1
LEFT JOIN EventInfo E2
ON E1._id =E2.ParentEventInfoID
Where Name LIKE "%search text%" OR
Description LIKE "%search text%" OR
ORDER BY E1.SortId