【问题标题】:How to make 1 query to 3 tables如何对 3 个表进行 1 个查询
【发布时间】:2016-07-13 11:51:48
【问题描述】:

我需要从食谱、成分和方法表中生成一列结果的查询。我的示例表:

我正在获取配方名称、配方贡献者、配方描述、 配方的成分及其方法

食谱表

+--------------------------------------------------------------------+
|RECIPE ID  | RECIPE NAME  | RECIPE CONTRIBUTOR | RECIPE DESCRIPTION |
----------------------------------------------------------------------
| 1         |Chicken Curry | Me                 | Spicy and Hot      |
+---------------------------------------------------------------------

配料表

+----------------------------------+
|ING ID  | ING NAME    | RECIPE ID | 
------------------------------------
|1       |Chicken      | 1         |
------------------------------------
|2       |Curry Powder | 1         |
+----------------------------------+

方法表

+----------------------------------+
|MET ID  | METHOD      | RECIPE ID | 
------------------------------------
|1       |Boil Chicken | 1         |
------------------------------------
|2       |Cook curry   | 1         |
+----------------------------------+

期望的输出:

+---------------+
|Output Column  |
-----------------
 Chicken Curry
 Me
 Spicy and Hot
 Chicken
 Curry Powder
 Boil Chicken
 Cook curry
+----------------+

【问题讨论】:

  • 你只需要加入表格
  • 这听起来像是一个有趣的项目,如果您有任何问题,请告诉我们!

标签: mysql sql database sqlite


【解决方案1】:

据我了解,您希望将不同表中的不同列组合成单个列输出,以便在您的 Android 应用程序中使用它(以前问题有 android 标签)。下面找到我的解决方案:

String query = 
"select \"RECIPE NAME\" AS output from Recipe
union all
select \"RECIPE CONTRIBUTOR\" from Recipe
union all
select \"RECIPE DESCRIPTION\" from Recipe
union all
select \"ING NAME\" from Ingredients
union all
select METHOD from Methods";

Cursor cursor = sqLiteDatabase.rawQuery(query, null);

然后用cursor.getString(0);遍历游标以检索每一行

【讨论】:

    【解决方案2】:

    首先,您不应该在列中使用空格。但是查询看起来像:

    SELECT "r.RECIPE NAME", "r.RECIPE CONTRIBUTER", "r.RECIPE DESCRIPTION", "i.ING NAME", "m.METHOD" 
    FROM Recipe AS r INNER JOIN Ingridients AS i ON "r.RECIPE ID" = "i.RECIPE ID" INNER JOIN Methods AS m ON "r.RECIPE ID" = "m.RECIPE ID" 
    WHERE "r.RECIPE ID" = 1
    

    选择等周围的双引号是因为列名中的空格,如果您将数据库更改为具有 ex: RECIPE CONTRIBUTER = RECIPE_CONTRIBUTER 的列,您可以只执行 r.RECIPE_CONTRIBUTER 而不使用双引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2023-03-05
      • 1970-01-01
      • 2010-11-04
      • 2013-04-28
      • 1970-01-01
      相关资源
      最近更新 更多