2014-10-01 93 views
1

我正在使用sqlite並且有一個語言字典。我想在表格中搜索一次英文匹配,然後再通過匹配外鍵(與日文字符)來查找另一種語言的結果。SQL查詢表2x然後將結果合併爲1列

目前,我可以通過做2個查詢來獲得結果,並有4個獨立的列:文本x2和語言x2。

如何將它們合併爲一列作爲新行?我不認爲SQL的聯盟是我正在尋找的。 我也嘗試做一個選擇內查詢表兩次,但查詢時間從我的筆記本電腦~700毫秒到〜1400毫秒,我打算在移動應用程序中使用它,所以我想保留速度下降。我也希望能夠使用cshart sqlite ORM來獲取這些結果,並將它們放入一個具有語言集合的模型中。

這裏是我試過的樣本查詢(我已經嘗試了一堆)

-- find the Character using the Reading's ChFKEY 
select 
    r.ID, 
    r.Text, 
    r.Language, 
    reading.Text, 
    rl.Language, 
    r.ChID, 
    r.KaID 
from 

-- first, find a dictionary match for English 
(select 
     r.ID, 
     r.Text, 
     rl.Language, 
     r.ChID, 
     r.KaID 
    from Reading r 
    join ReadingLanguage rl on r.RLID = rl.ID 
    where r.RLID = 1 
    and r.Text like 'food%')r 
join Reading reading on reading.RLID in (8,9) -- find JapaneseOn, JapaneseKun 
join ReadingLanguage rl on reading.RLID = rl.ID --get the language text 
and reading.ChID = r.ChID; -- use the character FKey to find matches 

,這裏是從上述查詢的樣本結果:
「977」,「食物,魚餌,獵物,誘人的利潤「」英語「」ジ,ニ「」JapaneseOn「」284「」128「
」977「」食物,誘餌,獵物,誘惑利潤「」英語「」え,えば,えさ,もち「」 JapaneseKun「」284「」128「

編輯
這裏是我希望得到的:
「977」「食物,誘餌,獵物,誘人的利潤」「英語」「284」「128」
「977」「え,えば,えさ,もち」「 JapaneseKun」 「284」 「128」
「977」, 「ジ,ニ」 「JapaneseOn」 「284」 「128」

+0

只有一種方法可以使查詢返回一列,通過將它們與CONCAT或||連接起來。取決於你的RDBMS的SQL implmentation。 – ararog 2014-10-01 19:39:15

+0

是否有可能將它們作爲新行? – 2014-10-01 19:42:30

+0

不要這樣想。 – ararog 2014-10-01 20:03:09

回答

0

編輯它發生,我認爲我可以做整個事情產生字典結果我想要的並且我正在以錯誤的方式考慮它。我現在正在使用group_concat將日語結果放在一起,並在另一列中輸入英語。這種方式在c#中不需要工作來產生視圖的結果。

select 
ID, 
Text as English, 
group_concat(Japanese) as Japanese, 
Character 
from 
(
select 
    r.ID, 
    r.Text, 
    ch.Text as Character, 
    reading.Text as Japanese 
from 
(
    (
    select 
     r.ID, 
     r.Text, 
     rl.Language, 
     r.ChID, 
     rl.ID 
    from Reading r 
    join ReadingLanguage rl on r.RLID = rl.ID 
    where r.RLID = 1 --English 
    and r.Text like 'food%' 
    )r 
join Reading reading on reading.RLID in (8,9) --JapaneseOn, JapaneseKun 
join ReadingLanguage rl on reading.RLID = rl.ID 
join Character ch on r.ChID = ch.ID --grab the kanji character 
and reading.ChID = r.ChID 
) 
order by rl.ID desc --so that the hiragana shows up before the katakana 
) 
group by Character; 

新的結果是
「34905」, 「食品的規定」, 「かて,リョウ,ロウ」, 「糧」

編輯舊版本 我得到了一些幫助。事實證明,Union All就是爲此而走的路。新的查詢在446毫秒內完成(除非我命令它),我希望ORM將它們正確地放入父對象。

-- find the Character using the Reading's ChFKEY 
-- 448 ms 

select 
    r.ID, 
    r.Text, 
    rl.Language, 
    ch.Text as Character 
from Reading r 
join ReadingLanguage rl on r.RLID = rl.ID 
join Character ch on r.ChID = ch.ID 
where r.RLID = 1 
and r.Text like 'food%' 

union all 

select 
    r.ID, 
    reading.Text, 
    rl.Language, 
    ch.Text as Character 
from 
(
    select 
     r.ID, 
     r.Text, 
     rl.Language, 
     r.ChID, 
     r.KaID 
    from Reading r 
    join ReadingLanguage rl on r.RLID = rl.ID 
    where r.RLID = 1 
    and r.Text like 'food%')r 
join Reading reading on reading.RLID in (8,9) -- find the JapaneseOn, JapnaeseKun 
join ReadingLanguage rl on reading.RLID = rl.ID -- get the actual language 
join Character ch on r.ChID = ch.ID -- get the japanese character that it belongs to 
and reading.ChID = r.ChID 
--order by r.ID 
; 

和樣品輸出爲
「977」, 「食物,魚餌,獵物,誘人的利潤」, 「英語」, 「餌」
「977」, 「ジ,ニ」 「JapaneseOn」 「餌」
「977」「え,えば,えさ,もち」「JapaneseKun」「餌」