SQLite的,桌子,加入 [英] SQLite, Tables, Joining

查看:118
本文介绍了SQLite的,桌子,加入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android的,实施的SQLite

Android, implementing SQLite

这是我有表:

http://postimg.org/image/jafsx39h7/

我有code:

public String getWorkoutNameInfo() {
    // TODO Auto-generated method stub

    String[] columns = new String[] { KEY_DATE_OF_WORKOUT,
            KEY_WORKOUT_NAME, KEY_DATE };           
    Cursor c = ourDatabase.query(TABLE_DATE_WORKOUT, columns, null, null,           
            null, null, null, null);                    
    String workoutName2 = "";               
    int iWorkoutID = c.getColumnIndex(KEY_WORKOUT_NAME);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        workoutName2 = workoutName2 + c.getString(iWorkoutID);  

            }

        return workoutName2;

}

这将返回workoutName2这是'2 1 2

This returns workoutName2 which is '2 1 2'

现在我需要查找2的值在我WorkoutTable和返回后退,并产生回,胸,背这样我就可以了把那个到我的屏幕,而不是2 1 2。

Now i need to look up the value for 2 in my WorkoutTable and return 'Back' and produce 'Back,Chest,Back' so i can out put that onto my screen instead of 2 1 2.

我明白我将使用一个JOIN语句?但是我遇到没有运气实现它。

I understand I'll be using a JOIN statement? However i'm having no luck implementing it.

我的表编码:

// WORKOUT TABLE - COLUMN NAMES
public static final String KEY_WORKOUT = "workout_id";
public static final String STRING_WORKOUT = "workout_name"; 


    // DATE OF WORKOUT TABLE - COLUMN NAMES
public static final String KEY_DATE_OF_WORKOUT = "date_of_workout_id";
public static final String KEY_DATE = "date_of_workout";
public static final String KEY_WORKOUT_NAME = "workout_id";

    //TABLE NAMES
private static final String TABLE_WORKOUT = "WorkoutTable";
private static final String TABLE_DATE_WORKOUT = "DateofWorkout";

下面是我的尝试:

public String test(String workoutSelectedNameInfo) {

    // TODO Auto-generated method stub
    String NAMEofWorkout = "";
    open();
    ourDatabase = ourhelper.getReadableDatabase();
    Cursor c = ourDatabase
            .rawQuery(
                    "SELECT * FROM WorkoutTable LEFT JOIN DateofWorkout ON (WorkoutTable.workout_id = DateofWorkout.workout_id)   WHERE workout_id = ?",
                    new String[] { "2" });



    int iDateofWorkoutsWorkoutId = c.getColumnIndex(KEY_WORKOUT_NAME);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        NAMEofWorkout = NAMEofWorkout + c.getString(iDateofWorkoutsWorkoutId);
    }
    c.close();
    ourDatabase.close();
    System.out.println(NAMEofWorkout);
    return NAMEofWorkout;

}

然而,当它输出NameofWorkout这应该是胸部,背部,胸部我收到什么都没有,绝对空白。

HOWEVER When it output the 'NameofWorkout' which SHOULD be Chest,Back,Chest i receive nothing at all, absolutely blank.

推荐答案

当我输入数据到一个SQLite的实例,我的机器上,然后执行查询,我得到以下错误:

When I enter your data into a SQLite instance on my machine and then execute your query, I get the following error:

错误:不明确的列名:workout_id

Error: ambiguous column name: workout_id

在查询中,改变 WHERE workout_id WHERE DateofWorkout.workout_id 使错误走了。

In the query, changing WHERE workout_id to WHERE DateofWorkout.workout_id makes the error go away.

此问题发生,因为有在结果中名为 workout_id 两列,并且必须消除歧义的后续引用。正因为如此,你可能还必须更改

This problem happens because there are two columns named workout_id in the result, and you must disambiguate your subsequent references. Because of this, you probably must also change

c.getColumnIndex(KEY_WORKOUT_NAME)

c.getColumnIndex(TABLE_DATE_WORKOUT +。+ KEY_WORKOUT_NAME)

当你使用效果更高版本。

when you make use of the results later.

这篇关于SQLite的,桌子,加入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆