[英]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
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
1 10 100
1 20 100
選擇了2條記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.