2017-05-11 124 views
0

我不是最好的,在SQL查詢,我瞭解的基礎知識,我想在做一個單一的一個這個查詢,而不是兩個,我有以下查詢:連接兩個搜索查詢SQL

SELECT * FROM `playerpdata` WHERE infoid LIKE '%Cash%' ORDER BY cast(value as int) DESC 

它會返回喜歡這樣的結果:

infoid    value 
3924839048[Cash] 60000 
93849384[Cash]  43000 

然後我想利用價值[現金]之前(也就是用戶ID),然後瓶坯這樣的:

SELECT value FROM `playerpdata` WHERE infoid = '<ID FROM ABOVE>[CharacterName]' 

我真的很感激,如果有人能幫助我,謝謝:)

編輯; 預期輸出:

infoid    value  value 
3924839048[Cash] 60000  Joe Bloggs 
93849384[Cash]  43000  Jane Doe 
+0

是什麼結合這兩個查詢的預期結果? –

+1

我認爲重新設計數據庫結構不是一種選擇,還是它? – Yunnosch

+0

你可以從SQLite命令行工具提供一個合適的玩具db的'.dump'嗎?這樣可以節省大家打字的時間。 – Yunnosch

回答

2

簡單的替換功能應該做的伎倆與字符名稱替換上加入現金。

SELECT PD.*, PD2.value 
FROM `playerpdata` PD 
INNER JOIN `playerpdata` PD2 
on PD2.infoid = Replace(PD.InfoID,'[Cash]','[CharacterName]') 
WHERE PD.infoid LIKE '%[Cash]' 
ORDER BY cast(PD.value as int) DESC 

雖然現金,charactername在一個單獨的領域更有意義。作爲信息類型或其他東西...

請注意,假設[cash]不會在其他地方存在。

或...此方法會生成特定於現金或字符名稱的PD和PD2表別名,然後加入無[[]的ID。似乎只是清潔我...但承擔INFOID的最後部分將始終[],定義[charactername]或[現金]

SELECT PD.*, PD2.value 
FROM `playerpdata` PD 
INNER JOIN `playerpdata` PD2 
    on replace(PD2.infoid,'[CharacterName]','') = Replace(PD.InfoID,'[Cash]','') 
and PD.infoid LIKE '%[Cash]' 
and PD2.InfoID like '%[CharacterName]') 
ORDER BY cast(PD.value as int) DESC 
+0

有趣的是,我們獨立提出了答案,並且用LIKE'%[現金]'取代了他的LIKE'%Cash%'! – Edward

+0

我喜歡索引。 @ bloodless2010需要把'pd.value'放在訂單上。只存在一個不存在表別名的字段......這是我們正在進行自聯接所需要的,所以所有列都需要alais。 – xQbert

+0

嘗試運行兩個查詢並得到結果'模棱兩可的列名',這裏是一個SQL導出,如果它有任何幫助:https://hastebin.com/lerefezuva.sql編輯:@xQbert,現在剛跑第一個,它返回一些結果,但我得到了這個:https://gyazo.com/1f1a82dda3c2078aff50511ffd1fc6d7 – bloodless2010

1

事情是這樣的:

SELECT * FROM `playerpdata` p1 
LEFT OUTER JOIN `playerpdata` p2 ON p2.infoid = SUBSTR(1,LENGTH(p1.infoid)-6)||'[CharacterName]' 
WHERE p1.infoid LIKE '%[Cash]' 
ORDER BY cast(p1.value as int) DESC