【问题标题】:Android Sqlite subquery is not returning all intended resultsAndroid Sqlite 子查询未返回所有预期结果
【发布时间】:2019-09-12 11:36:48
【问题描述】:

我正在开发一个从本地 sqlite 数据库中检索数据的学习应用程序。该数据库有两个表。

  1. 存储文章类别的category 表:
+-------------+--------------------------+
| category_id | category_value           |
+-------------+--------------------------+
| programming | How To Start Programming |
+-------------+--------------------------+
| math        | How To Start Math        |
+-------------+--------------------------+
| chemistry   | How To Start Chemistry   |
+-------------+--------------------------+
  1. 存储文章本身的article 表:
+-------------+------------+------------------------+
| parent_id   | article_id | article_value          |
+-------------+------------+------------------------+
| programming | java       | Let's learn java       |
+-------------+------------+------------------------+
| programming | python     | Let's learn python     |
+-------------+------------+------------------------+
| math        | funcs      | Let's learn functions  |
+-------------+------------+------------------------+
| math        | derivative | Let's learn derivative |
+-------------+------------+------------------------+
| chemistry   | lewis      | Let's learn Lewis      |
|             |            | structure              |
+-------------+------------+------------------------+

现在我确实实现了搜索功能。我希望结果要么是在其article_value 中具有搜索短语的文章,要么是在其父category_value 中具有搜索短语的文章。所以我使用了这个查询:

SELECT * FROM article WHERE article_value LIKE '%search_phrase%' OR parent_id = (SELECT category_id FROM category WHERE category_value LIKE '%search_phrase%')

它适用于文章部分,但是当涉及到子查询部分时,它只返回一个类别的文章。即使有更多合格的类别。

【问题讨论】:

  • 你能分享一个搜索短语没有给出正确的结果吗?

标签: android sql sqlite android-studio


【解决方案1】:

LEFT JOIN 做你想做的事吗?

SELECT a.*
FROM article a LEFT JOIN
     category c
     ON c.category = a.article_parent AND
        c.category_value LIKE '%search_phrase%'
WHERE a.article_value LIKE '%search_phrase%' OR 
      c.category IS NOT NULL;

【讨论】:

    【解决方案2】:

    你可以用 EXISTS 做到这一点:

    SELECT a.* FROM article a 
    WHERE a.article_value LIKE '%search_phrase%' 
    OR EXISTS (
      SELECT 1 FROM category c
      WHERE c.category_id = a.parent_id
      AND c.category_value LIKE '%search_phrase%'
    )
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      相关资源
      最近更新 更多