gpt4 book ai didi

mysql - SQL条件连接不同的表

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:42 25 4
gpt4 key购买 nike

我必须在现有项目上添加一个通知模块。我的表结构如图所示。

图片:conditionalJoin

正如您在图片上看到的,每个通知都有一个类型和一个相关 ID。

类型 1 = 预订已取消,相关 ID 是“预订”表上的 ID

类型 3 = 账户余额低于给定的最小值。限制所以releatedID是“account_movements”上的id表格

我想做的是条件连接以避免 2 个不同的 sql 查询;

  1. 获取属于此人的所有通知
  2. 根据“notification.Type”获取不同表的通知详情

所以问题是我可以在一个查询中完成吗?

最佳答案

像下面这样的东西应该可以工作。基本上,您指定 notifications 表中的哪些记录与 reservations 表或 account_movements 表中的记录连接。使用 LEFT JOIN 以便您所有的notification 记录都通过,并且只有 reservations 表或 account_movements 中匹配的那些记录才能通过通过。

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

这是一个SQL FIDDLE也有解决方案。

我在 COALESCE() 中添加只是为了表明由于 JOINS 是互斥的,您可以安全地组合 reservations 表和 account_movements 中的列 表到一个列而不用担心丢失或重复任何数据。

关于mysql - SQL条件连接不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26715656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com