基于列值的条件连接

Yar*_*rin 4 mysql sql

我正在尝试根据事件类型有条件地将一个主事件表连接到其他三个主事件表。select 语句工作正常,并返回我期望的结果集,但是当我添加 JOIN 语句时,出现错误,指出未找到列别名:

SELECT 
event.type as type,
IF(type = 'birthday', event.target_id, NULL) as birthday_id,
IF(type = 'graduation', event.target_id, NULL) as graduation_id,
IF(type = 'wedding', event.target_id, NULL) as wedding_id
FROM event
LEFT OUTER JOIN birthday ON birthday_id = birthday.id
LEFT OUTER JOIN graduation ON graduation_id = graduation.id
LEFT OUTER JOIN wedding ON wedding_id = wedding.id
Run Code Online (Sandbox Code Playgroud)

收到此错误:

“on 子句”中的未知列“birthday_id”


更新:好吧,塞巴斯刚刚表示你无法加入计算结果,在这种情况下我的方法就失效了。那么做这样的事情的正确方法是什么?

Seb*_*bas 5

SELECT 
    event.type as type,
    IF(type = 'birthday', birthday.id, NULL) as birthday_id,
    IF(type = 'graduation', graduation.id, NULL) as graduation_id,
    IF(type = 'wedding', wedding.id, NULL) as wedding_id
FROM 
    event
        LEFT OUTER JOIN birthday b  ON event.target_id = b.id
        LEFT OUTER JOIN graduation g    ON b.id IS NULL AND event.target_id = g.id
        LEFT OUTER JOIN wedding w   ON b.id IS NULL AND g.id IS NULL AND event.target_id = w.id
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题,给我反馈!rgds。

编辑:请参阅 IS NULL 条件。我没有测试,不知道mysql是否接受!如果是,那么几乎只会完成必要的连接......