sql - sql查询过滤在另一个表中使用的行
问题描述
我有三张桌子...
表 1消息类型
表 2 businesschannel列:idBusinessChannel、idsystem、idMessageType、direction
表 3 partnersystemmessages的列:idSystem、idMessageType
我需要编写一个返回消息类型列表的查询,该列表散发出已经被合作伙伴系统消息(idSystem 列)表和业务渠道(方向列)使用的消息。
到目前为止,我有以下查询,它返回消息类型列表但忽略方向
SELECT DISTINCT messagetype.*
FROM messagetype
LEFT OUTER JOIN BUSINESSCHANNEL bc ON
bc.idMessageType = messagetype.idMessageType
AND bc.direction = 'out'
LEFT JOIN partnersystemmessages ON
messagetype.idMessageType = partnersystemmessages.idMessageType
AND partnersystemmessages.idSystem = 522
WHERE partnersystemmessages.idMessageType IS NULL
更新 - 添加示例数据
messagetype
+--------------+----------+
| idMessageType| Name |
+--------------+----------+
| 1 | SMTP |
| 2 | EDI |
| 3 | AS2 |
| 4 | WED |
| 5 | IDOC |
| 6 | general |
+--------------+----------+
businesschannel
+------------------------+----------+---------------+------------+
| idpartnersystemmessages| idsystem | idMessageType | direction| |
+------------------------+----------+---------------+------------+
| 1859 | 522 | 2 | in |
| 5131 | 522 | 1 | out |
| 1773 | 522 | 2 | out |
| 1775 | 522 | 3 | in |
| 1777 | 522 | 4 | out |
| 4555 | 522 | 5 | in |
+------------------------+----------+---------------+------------+
partnersystemmessages
+-------------------------+----------------+---------------+
| idpartnersystemmessages |MessageidSystem | |idMessageType|
+-------------------------+----------------+---------------+
| 1859 | 522 | 2 |
| 5131 | 522 | 1 |
| 1773 | 522 | 2 |
| 1775 | 522 | 3 |
| 1777 | 522 | 4 |
| 4555 | 522 | 5 |
--------------------------+----------------+--------------+
对于 idSystem = 522 和方向 = 'out' 我期待:
messagetype
+--------------+----------+
| idMessageType| Name |
+--------------+----------+
| 1 | SMTP |
| 3 | AS2 |
| 5 | idoc |
| 6 | general |
+--------------+----------+
不包括已用于外向的 EDI 和 WEB
解决方案
通过更改加入尝试如下
SELECT DISTINCT m.*
FROM messagetype m
LEFT OUTER JOIN BUSINESSCHANNEL bc ON
bc.idMessageType = m.idMessageType
JOIN partnersystemmessages ON
bc.idsystem= partnersystemmessages.idsystem
AND partnersystemmessages.idSystem = 522
WHERE bc.idMessageType IS NULL
推荐阅读
- python - 我无法按索引类型从列表中删除项目
- python - 使用 python 格式化字符串
- c++ - QTimer::singleShot(..) 在 connect(..) 函数中
- azure-devops - 当史诗般的关闭日期是电子邮件通知
和目标日期 < 今天的日期? - python - Python ursina:通过改变 FOV 的值来瞄准(动画问题)
- pyspark - 如何对数据框的每一行进行排序?
- perl - Perl 中变量名周围的花括号是可选的吗?
- prometheus - Prometheus 和 HDInsight 集成
- python - 使用 Python 匹配两个 csv 文件之间的数据(最好是 Pandas?)
- spring-mvc - 如何从 aws secret manager 在 spring mvc 项目中添加数据源属性