mysql - SQL OR 返回两个表达式
问题描述
我有一个存储的 SQL 过程,我想根据 COALESCE 或 OR 的结果加入另一个表,但不知何故,它似乎在返回两个表达式。
用例:如果播放列表不存在时间表 -> 返回默认时间表 (24/7)。这就像一个魅力,我得到了 ID 1 的时间表。但如果有一个时间表,程序会返回两个时间表。:-(
这是我的代码:
...
RIGHT JOIN schedule
ON COALESCE(playlists.ID = schedule.PLID,playlists.SCHEDULES_ID=1)
WHERE devices.IDENTIFIER = ParamID;
有什么建议么?
提前谢谢!
彼得
更新
似乎合并不是我的情况的正确解决方案。有人有建议吗?
我有一个表“时间表”,其中有一列“PLID”(PlaylistID)。在我的查询中,我想根据这个值加入这个表。如果没有匹配 PLID 的时间表,我想加入默认时间表(ID = 1)。
更新 2
我现在正在尝试一种新方法,但似乎仍然不起作用。如果没有时间表,我会得到默认时间表(ID1)。如果有时间表->我得到默认+实际分配的时间表(PLID = playlists.ID)
LEFT JOIN schedule
ON (schedule.PLID=playlists.ID)
OR (schedule.ID = '1')
解决方案
我想你想要这个逻辑:
...
RIGHT JOIN schedule
ON playlists.ID = schedule.PLID OR
playlists.SCHEDULES_ID = 1
WHERE devices.IDENTIFIER = ParamID;
如果 ID 相等,或者如果播放列表的时间表 ID 为 1,则这将进行加入。
推荐阅读
- rest - Xamarin 使用 MVVM 将数据传递和检查到其他视图
- docker - 访问在 Docker Swarm 服务中运行的单个容器
- javascript - Javascript - 并行调用函数并返回组合结果
- maven - 如何让 Maven 插件与 SonarScanner 一起使用?
- ios - Swift iOS TimeZone 作为字符串?
- c# - 任务和从 api 逻辑反序列化对象和反序列化 json
- azureservicebus - 将 splitOn 与逻辑应用上的服务总线触发器一起使用时如何保留消息标头
- laravel - 如何在 PayPal 中覆盖没有复选框的送货地址
- git - 如何阻止用户访问 Visual Studio Online 上的 git repo
- angular - Angular 5+中装饰器@Injectable的明确含义