2012-01-18 120 views
0

如何在sql語句?我想要做這樣的事情:SQL如果語句

SELECT DISTINCT exchange.id userid, exchange.name username, exchange.lastactivity  lastactivity, exchange.id avatar, exchange.id link, cometchat_status.message, cometchat_status.status 
FROM buddy 
if(buddy.penpalA = 887){ 
     JOIN exchange ON buddy.penpalA = exchange.id 
}ELSE{ 
     JOIN exchange ON buddy.penpalB = exchange.id 
} 
LEFT JOIN cometchat_status ON exchange.id = cometchat_status.userid 
if(buddy.penpalA = 887){ 
     WHERE buddy.penpalB =887 
}ELSE{ 
     WHERE buddy.penpalA =887 
}  

ORDER BY username ASC 
+0

@Yuck,'case'不會有效這裏。 – 2012-01-18 19:27:05

+1

最後的IF子句,無論我讀了多少次都沒有意義。如果好友,penpalA = 887 - 那麼你希望penpalB被檢查,否則檢查penpala是887--這有點圓。 – Andrew 2012-01-18 19:37:33

+0

@Andrew:對,這一定是:'WHERE penpalA = 887 AND penpalB = 887',因爲'else'條件永遠不會被滿足。 – 2012-01-18 20:05:44

回答

2

只需修改WHERE S和ON秒。請注意,圍繞AND進行比較的偏見是不必要的;我只是爲了澄清發生了什麼。

SELECT DISTINCT exchange.id userid, exchange.name username, 
       exchange.lastactivity lastactivity, exchange.id avatar, 
       exchange.id link, cometchat_status.message, 
       cometchat_status.status 
FROM buddy 
JOIN exchange ON (buddy.penpalA = exchange.id AND buddy.penpalA = 887) 
       OR (buddy.penpalB = exchange.id AND buddy.penpalA <> 887 AND buddy.penpalB = 887) 
LEFT JOIN cometchat_status ON exchange.id = cometchat_status.userid 
WHERE buddy.penpalA = 887 OR buddy.penpalB = 887 
ORDER BY username ASC 

UPDATE:

我改變了上面的代碼也加入當penpalB是887,按我您的評論的理解。

+0

嗨,這沒有確切的工作,讓我解釋更多什麼即時通訊試圖做... – Jake 2012-01-18 19:30:17

+0

我有一個數據庫penpalA和penpalB這是一個數據庫中有所有的朋友請求,我希望能夠選擇所有userid 887的朋友記住用戶標識可以出現在penpalA或penpalB列中,你能找到我嗎? – Jake 2012-01-18 19:31:10

+0

@Jake,那麼你的問題是不正確的。我認爲你的第一個'ELSE'應該是'else if(buddy.penpalA = 887)'。對?讓我知道,我會提供一個解決方案。 – 2012-01-18 19:35:38

0

好,使用Transact-SQL,你可以構造一個IF-ELSE這樣的:

IF a > b 
BEGIN 
    // do something 
END 
ELSE 
    // do something else 
+0

問題標籤爲MySQL。另外,T-SQL不支持''''樣式註釋。FWIW,它**支持'/ * * /'。 – Yuck 2012-01-18 19:23:10