Mysql 如果另一行包含相同的列数据,则仅选择所需的行
当查询的多行中有相同的列数据,而这些数据仅在一列中不同时,如何对要获取的行进行优先级排序 例如,Mysql 如果另一行包含相同的列数据,则仅选择所需的行,mysql,Mysql,当查询的多行中有相同的列数据,而这些数据仅在一列中不同时,如何对要获取的行进行优先级排序 例如,is_primary列是优先级的基础: -------------------------------- emp_id | position | is_primary | -------------------------------- 00001 | 1 | Yes | -------------------------------- 00001 | 2
is_primary
列是优先级的基础:
--------------------------------
emp_id | position | is_primary |
--------------------------------
00001 | 1 | Yes |
--------------------------------
00001 | 2 | No |
--------------------------------
可以很容易地说添加一个条件,其中是“primary='Yes',但我想要的是,当且仅当emp_id多次出现时,才选择primary位置
以下是我的查询,有时会显示错误的员工职位:
SELECT a.emp_id, employee.getEmpName(a.emp_id) as full_name, b.position
FROM `employee.info` a LEFT JOIN `employee.positions` b on b.emp_id=a.emp_id
WHERE a.status!='Resigned'
GROUP BY a.emp_id
ORDER BY position,full_name;
还有其他emp_id只会产生一行,有时
的值是“主”
='No',应该选择(没有其他选择),但是当emp_id出现在两行中,分别有是“主”
=是和否时,应该选择唯一的一行。将表本身连接起来,但不适用于同一行:
SELECT distinct a.emp_id, employee.getEmpName(a.emp_id) as full_name, b.position
FROM `employee.info` a
JOIN `employee.info` a2 on a2.emp_id=a.emp_id
AND a2.is_primary != 'Yes'
LEFT JOIN `employee.positions` b on b.emp_id=a.emp_id
WHERE a.status!='Resigned'
AND a.is_primary = 'Yes'
GROUP BY a.emp_id
ORDER BY position,full_name;
位置
表格:
emp_id varchar(5)
position int(11)
is_primary tinyint(1)
职位表数据:
00001 1 1
00001 2 0
查询:
SELECT * FROM `positions`
WHERE
`emp_id` = '00001' AND
`position` = (
SELECT MIN(`position`) FROM `positions` WHERE `emp_id` = '00001'
)
输出:
00001 1 1
如果您希望获得具有最小位置的行,则为。如果要获取具有最大位置的行,请使用
MAX
函数。无法使其工作。有一件事我忘了补充,还有其他行(一行)有一个primary_position='No',只要它们的emp_id匹配,就应该强制选择它。但当出现包含“是”和“否”的两行时,应仅选择“是”。