覆盖外连接失败的记录的默认值

时间:2015-03-31 08:01:28

标签: php mysql join

我有这个MySQL查询:

SELECT   event.*, GROUP_CONCAT(forname, ' ', surname SEPARATOR ', ') as real_name 
FROM     event LEFT JOIN user ON event.organizer = user.id 
WHERE    owner IS NOT NULL 
GROUP BY event.id 
ORDER BY startdatetime ASC

输出以PHP格式打印:

print($zeile['real_name'] == '' ? $zeile['organizer'] : $zeile['real_name']);

这很好用,但我问自己是否可以在SQL中实现三元操作。我的意思是说: 如果连接成功,结果集的real_name列将取GROUP_CONCAT(forname, ' ', surname SEPARATOR ', ')的值,如果不成功,则event.organizer取值。

2 个答案:

答案 0 :(得分:1)

您可以在请求中使用IF:

例如:

         //  Condition   //Succeded //FAILED                                     
SELECT IF (forname = '', organizer, forname) FROM ......

答案 1 :(得分:1)

无法满足加入条件的记录在NULL表的每一列中都有user,包括在加入条件本身中使用的那些列。你可以这样使用这个事实:

IF(user.id IS NULL, event.organizer, GROUP_CONCAT(forname, ' ', surname SEPARATOR ', '))