我要在现有项目上添加通知模块。 我的表结构就像在图片上一样。
图片:
如图所示,每个通知都有一个类型和一个相关的ID。
类型1 =取消预订,相关ID是"预订"表
类型3 =帐户余额低于给定的最小值。限制所以releatedID是" account_movements" 表
我尝试做的是一个条件连接,以避免两个不同的SQL查询;
所以问题是我可以在一个查询中完成吗?
答案 0 :(得分:2)
以下内容应该有效。基本上,您指定notifications
表中的哪些记录与reservations
表中的记录或account_movements
表中的记录一起加入。使用LEFT JOIN以便所有{{1}记录通过,只有notification
表中的那些记录或匹配的reservations
中的记录才能通过。
account_movements
这里有一个SQL FIDDLE解决方案。
我添加了SELECT
n.id,
n.type,
n.companyid,
n.personid,
n.relatedid,
n.description,
r.details as reservation_details,
am.details as account_movement_details,
COALESCE(r.details, am.details) AS combined_detail
FROM
notifications n
LEFT OUTER JOIN reservations r ON
n.relatedid = r.id AND
n.type = 1
LEFT OUTER JOIN account_movements am ON
n.relatedid = am.id AND
n.type = 3
只是为了表明由于JOINS是互斥的,您可以安全地将COALESCE()
表和reservations
表中的列组合成一列而不用担心丢失或复制任何数据。
答案 1 :(得分:1)
如果您进行左连接,则不必具备任何条件:
SELECT * FROM notifications n
LEFT JOIN reservations r ON n.releatedID = r.id
LEFT JOIN account_movements m ON m.releatedID = m.id