2012-01-18 89 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