Sql条件加入不同的表

时间:2014-11-03 13:45:47

标签: mysql join conditional-statements

我要在现有项目上添加通知模块。 我的表结构就像在图片上一样。

图片:conditionalJoin

如图所示,每个通知都有一个类型和一个相关的ID。

类型1 =取消预订,相关ID是"预订"表

类型3 =帐户余额低于给定的最小值。限制所以releatedID是" account_movements" 表

我尝试做的是一个条件连接,以避免两个不同的SQL查询;

  1. 获取属于此人的所有通知
  2. 根据" notification.Type"从不同的表格中获取通知详细信息
  3. 所以问题是我可以在一个查询中完成吗?

2 个答案:

答案 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