2013-04-25 53 views
1

我有兩張包含數百萬條記錄的表,我需要加入才能以不同的語言顯示結果。我希望使用帶有IF條件的查詢創建視圖,但我無法理解哪種方法是正確的。在Mysql查詢中使用IF

我需要做的是:如果以下選擇有單排空(換句話說,該行沒有一個德語翻譯)......

選擇一,兩名來自tableA的LEFT JOIN tableB的B開(A.id = B.id),其中語言= '德' ORDER BY XYZ

...然後取英文版本的同一行,因此這樣做選擇:

SELECT one,two FROM tableA A LEFT JOIN tableB B ON(A.id = B.id)WHERE language ='en'order by xyz

謝謝! Luca

+0

我不知道MySQL的具體,但它有一個@@ ROWCOUNT功能? – iGanja 2013-04-25 16:21:02

回答

1

由於您沒有別名,因此您的查詢很難遵循。我假設它的結構是這樣的:

select a.one. b.two 
from tableA a left join 
    tableb b 
    on a.id = b.id 
where b.language = 'de' 
order by xyz 

以下規定,應該在MySQL的邏輯:

SELECT a.one, 
     (case when (select COUNT(*) from b where b.id = a.id and b.language = 'de' and b.two is null) = 0 
      then bde.two 
      else bend.two 
     end) as two 
FROM tableA A LEFT JOIN 
    tableB Bde 
    ON (A.id=B.id) and 
     bde.language='de' left join 
    tableB ben 
    on ben.language = 'en' 
order by xyz 

這是假設NULL值存儲在B表。如果是通過一個連接丟失,那麼它是一個有點困難,有點像:

SELECT a.one, 
     (case when (select COUNT(*) from a a2 join b b2 on a2.id = b2.id and b2.language = 'de' and b2.two is null) = 0 
      then bde.two 
      else bend.two 
     end) as two 
FROM tableA A LEFT JOIN 
    tableB Bde 
    ON (A.id=B.id) and 
     bde.language='de' left join 
    tableB ben 
    on ben.language = 'en' 
order by xyz 
+0

非常感謝您的幫助。我改變了這種查詢方式 'SELECT g.geonameid,alternateName,緯度,經度,fclass,fcode,國家 FROM geoname g LEFT JOIN備用名稱ON(g.geonameid = a.geonameid)WHERE IF(select COUNT *)from geoname g JOIN alternatename a ON g.geonameid = a.geonameid and isoLanguage ='de',1,0)= 1 THEN isolanguage ='de'ELSE isolanguage ='en'by isPreferredName' 但我收到如果(選擇... 我試過你的查詢,但沒有成功。 – Luca 2013-04-25 17:44:02