如何对3个表进行1次查询

时间:2016-07-13 11:51:48

标签: mysql sql database sqlite

我需要根据食谱,成分和方法表生成一个查询结果。我的示例表:

我正在获取食谱名称,食谱贡献者,食谱描述, 食谱配料及其方法

食谱表

+--------------------------------------------------------------------+
|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
+----------------+

2 个答案:

答案 0 :(得分: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);迭代光标以检索每一行

答案 1 :(得分:-1)

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

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而不使用双引号。