mysql - 如何用 JOIN 替换 IN 子句?
问题描述
select [CLIENT_SUIT_ID]
,[CLIENT_CODE]
,[CARD_ID]
,[EXPIRE_DATE]
,ROW_NUMBER()over(partition by CARD_ID order by CARD_ID ASC)
from [KSS_TMP].[dbo].[CLIENT_SUIT]
where CARD_ID in(
SELECT CARD_ID
from [KSS_TMP].[dbo].[CLIENT_SUIT]
where CLIENT_CODE NOT LIKE '080%' AND card_id != '-'
GROUP BY CARD_ID
HAVING COUNT(CARD_ID) > 1
)
你能告诉我如何用 JOIN 替换 IN 子句吗?我试图保持我的条件,所以我必须使用 IN。
解决方案
如果你想in
用 a 替换你的子句join
:
select [CLIENT_SUIT_ID]
,[CLIENT_CODE]
,[CARD_ID]
,[EXPIRE_DATE]
,ROW_NUMBER()over(partition by CARD_ID order by CARD_ID ASC)
from [KSS_TMP].[dbo].[CLIENT_SUIT] as Tab1 JOIN
(SELECT CARD_ID FROM [KSS_TMP].[dbo].[CLIENT_SUIT]
where CLIENT_CODE NOT LIKE '080%' AND card_id != '-'
GROUP BY CARD_ID
HAVING COUNT(CARD_ID) > 1 ) as Tab2 ON Tab1.Card_Id = Tab2.Card_Id
在您的情况下,您实际上并不需要额外的子查询。您可以使用另一个窗口函数在 1 个查询中完成所有操作conditional aggregation
:
select * from (
select *,
row_number() over (partition by card_id order by card_id) rn,
count(case when client_code not like '080%' and card_id != '-'
then 1 end) over (partition by card_id) cnt
from client_suit
) t
where t.cnt > 1;
推荐阅读
- asp.net-mvc - 非静态方法的问题需要一个目标
- excel - 在excel vba中的动态数组中设置Ubound值
- jquery - 如何使用 jquery 在 keyup 上更改/修改多个 href 的某些部分?
- python - 如何创建包含范围内但不在索引中的日期的 MultiIndex 的笛卡尔积
- maven - 如何将maven多模块spring boot部署到docker容器
- javascript - 如何在 JavaScript 中用匹配的对象值替换模板标签?
- angular - Angular 8 模板驱动表单 - 使用 ngTemplateOutlet 传递控件
- python - Django 模型查询按月/年对结果进行分组,并在单独的 DIV 元素中显示每个月的结果
- java - 影响另一个类中的另一个方法的 if 语句
- python - 使用 geopandas 制作多个等值线图,按分类变量着色,并在地图之间保持相同的配色方案