内部选择的SQLite

时间:2014-01-29 04:24:45

标签: sql database sqlite select

我需要根据下面的表模式构造一个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,我感觉非常生疏。任何帮助是极大的赞赏。谢谢!

2 个答案:

答案 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