簡體   English   中英

Android SQLite查詢返回多個相同的列

[英]Android SQLite query returning multiple same columns

以下Android Sqlite中的查詢返回多個相同的列。 例如,它返回“meet_id”(3)次。 第一個(2)“meet_id”使用正確的數字是正確的,而第三個是空的。 我的“athlete_id”和“event_id”也是如此。 我假設這是因為我的左連接,因為第3個表現在是空的,但如果只為每個列屬性返回一列(1個滿足列和更多行?),則不應該這樣做:

Cursor cursorTemp = db.rawQuery("SELECT * FROM " + TABLE_MEETS + " LEFT JOIN " + TABLE_MEETS_ATHLETES +
                " ON " + TABLE_MEETS + "." + COL_MEET_ID + " = " + TABLE_MEETS_ATHLETES + "." + COL_MEET_ID +
                " LEFT JOIN " + TABLE_MEETS_ATHLETES_SPLITS + " ON " + TABLE_MEETS_ATHLETES + "." + COL_MEET_ID +
                " = " + TABLE_MEETS_ATHLETES_SPLITS + "." + COL_MEET_ID + " AND " + TABLE_MEETS_ATHLETES +
                "." + COL_ATHLETE_ID + " = " + TABLE_MEETS_ATHLETES_SPLITS + "." + COL_ATHLETE_ID + " AND " +
                TABLE_MEETS_ATHLETES + "." + COL_EVENT_ID + " = " + TABLE_MEETS_ATHLETES_SPLITS + "." +
                COL_EVENT_ID + " WHERE " + TABLE_MEETS + "." + COL_MEET_ID + " = ?", new String[]{String.valueOf(i)});

我知道這有點亂,但我更喜歡原始查詢

另外,meet id是第一個表中的主鍵,第二個和第三個表中是復合詞

SELECT * FROM...指令中, *符號包括所有列到結果中。 由於多個連接的結果,重復了一些列。 我的建議是用您感興趣的列名替換*

羅伯托似乎是對的。 我已經在DB2中嘲笑了這個,因為我可以理解你在嘗試什么

create table TABLE_MEETS (COL_MEET_ID int);

insert into table_meets (COL_MEET_ID) values (1),(2),(3);

create table TABLE_MEETS_ATHLETES (
COL_MEET_ID int,
COL_ATHLETE_ID int,
COL_EVENT_ID int);

insert into TABLE_MEETS_ATHLETES (COL_MEET_ID,COL_ATHLETE_ID,COL_EVENT_ID) values 
(1,10,100),
(2,10,101),
(1,20,100),
(2,20,101);

create table TABLE_MEETS_ATHLETES_SPLITS (
COL_MEET_ID int,
COL_ATHLETE_ID int,
COL_EVENT_ID int);

insert into TABLE_MEETS_ATHLETES_SPLITS (COL_MEET_ID,COL_ATHLETE_ID,COL_EVENT_ID) values 
(1,10,100),
(2,10,101),
(1,20,100),
(2,20,101);

SELECT *將列出所有表中的列。

針對DB2運行:

SELECT * FROM TABLE_MEETS LEFT JOIN TABLE_MEETS_ATHLETES ON TABLE_MEETS.COL_MEET_ID=TABLE_MEETS_ATHLETES.COL_MEET_ID LEFT JOIN TABLE_MEETS_ATHLETES_SPLITS ON TABLE_MEETS_ATHLETES.COL_MEET_ID=TABLE_MEETS_ATHLETES_SPLITS.COL_MEET_ID AND TABLE_MEETS_ATHLETES.COL_ATHLETE_ID=TABLE_MEETS_ATHLETES_SPLITS.COL_ATHLETE_ID AND TABLE_MEETS_ATHLETES.COL_EVENT_ID=TABLE_MEETS_ATHLETES_SPLITS.COL_EVENT_ID WHERE TABLE_MEETS.COL_MEET_ID=1

COL_MEET_ID COL_MEET_ID COL_ATHLETE_ID COL_EVENT_ID COL_MEET_ID COL_ATHLETE_ID COL_EVENT_ID

      1           1             10          100           1             10          100
      1           1             20          100           1             20          100

選擇了2條記錄。

但是你可能只想報告一個表中的給定列。 如果你真的期待NULLS,你需要考慮使用哪一個。

SELECT MEETS.COL_MEET_ID,ATHLETES.COL_ATHLETE_ID,ATHLETES.COL_EVENT_ID 
FROM TABLE_MEETS MEETS LEFT JOIN TABLE_MEETS_ATHLETES ATHLETES 
ON MEETS.COL_MEET_ID=ATHLETES.COL_MEET_ID 
LEFT JOIN TABLE_MEETS_ATHLETES_SPLITS SPLITS 
ON ATHLETES.COL_MEET_ID=SPLITS.COL_MEET_ID AND
ATHLETES.COL_ATHLETE_ID=SPLITS.COL_ATHLETE_ID AND 
ATHLETES.COL_EVENT_ID=SPLITS.COL_EVENT_ID WHERE MEETS.COL_MEET_ID=1

COL_MEET_ID COL_ATHLETE_ID COL_EVENT_ID

      1             10          100
      1             20          100

選擇了2條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM