如果条件存在,mysql select distinct
Posted
技术标签:
【中文标题】如果条件存在,mysql select distinct【英文标题】:mysql select distinct if condition exists 【发布时间】:2018-10-02 20:24:47 【问题描述】:我有这张桌子:
std_id std_type std_dept target
1 type-1 ALL 15
2 type-1 HRD 10
3 type-2 ALL 1
4 type-2 ACCTG 5
5 type-3 ALL 5
6 type-4 ALL 25
std_dept
的值为ALL
表示每个std_target
的std_type
对所有部门都有效
std_dept
具有特定的部门值,覆盖值形式点 (1)。
所以,我的问题是假设我来自 HRD
部门,我希望结果集如下:
std_id std_type std_dept target
2 type-1 HRD 10
3 type-2 ALL 1
5 type-3 ALL 5
6 type-4 ALL 25
我真的很喜欢展示我的作品,但我一点头绪都没有,我不知道如何区分select * from std_table (for each std_type) where std_dept='HRD' if exist else get from std_dept='ALL'
。
如果不是代码,我需要指针
【问题讨论】:
【参考方案1】:您可以使用NOT EXISTS
和相关子查询:
SELECT *
FROM tab
WHERE std_dept = 'HRD'
UNION ALL
SELECT *
FROM tab t1
WHERE std_dept = 'ALL'
AND NOT EXISTS (SELECT *
FROM tab t2
WHERE t2.std_dept = 'HRD'
AND t1.std_type = t2.std_type);
DBFiddle Demo
【讨论】:
感谢@lad2025 的回复,我会尽快尝试。再次感谢【参考方案2】:听起来你想加重它,所以如果你来自 HRD,那么你想要 HRD 或 ALL,如果你想要 ACCTG,那么你想要 ACCTG 或 ALL,类型 1-4。
您可以按 std_type 分组以使它们不同,并按其排序以使顺序正确。对于权重,您可以创建一个列,该列是与您在 WHERE 子句中使用的相同值进行比较的结果,例如类似:
SELECT std_id, DISTINCT(std_type) AS std_type,
std_dept, target,
IF (std_dept = 'HRD', 50, 10) AS weight
FROM mytable
WHERE std_dept IN ('ALL', 'HRD')
GROUP BY std_id, std_dept, target, weight
ORDER BY std_type
【讨论】:
感谢您的回答,我遇到了一个错误,由于我是 mysql 新手,我不知道如何解决这个问题。以上是关于如果条件存在,mysql select distinct的主要内容,如果未能解决你的问题,请参考以下文章