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匹配,就应该强制选择它。但当出现包含“是”和“否”的两行时,应仅选择“是”。