MySQL 根据 B 列中不同行中的值排除 A 列中的结果
MySQL excluding results in column A based on values in column B where the values are in different rows
在我的工作中,我们的馆藏管理数据库 (CMS) 被导出到一个 MySQL 转储中。由于 CMS 的结构,来自 table 的多值字段在转储中被拆分为单独的 table,例如标本被分成标本(仅来自标本 table 的单值字段)和 specimens_mv(来自标本 table 的多值字段)。在我们的数据库中,您可以通过关联的 material 字段 link 共享数据的标本(例如,两个标本的收集器编号相同)。您必须进入每个记录以进行成对组合(即在记录 A 中插入记录 B,在记录 B 中插入记录 A)。我正在寻找彼此不恰当关联的标本记录:
SELECT
sp.specimen_num,
sp.barcode AS barcode_1,
sp.coll_name AS collector_1,
sp.coll_num AS coll_num_1,
mv.nomen_type_kind as type_2,
sp2.specimen_num AS specimen_num_2,
sp2.barcode AS barcode_2,
sp2.COLL_NAME AS coll_name_2,
sp2.COLL_NUM AS coll_num_2,
FROM
specimens_mv AS mv
JOIN
specimens AS sp ON mv.specimen_num = sp.specimen_num
JOIN
specimens AS sp2 ON mv.ASSOCIATED_MAT_SPECIMEN_NUM = sp2.specimen_num
where sp2.coll_num != sp.coll_num;
问题是这些成对的关联是相互关联的,并且通常有两个以上的样本关联在一起,例如
| specimen_num 1 | specimen_num 2 |
|----------------|----------------|
| 87969 | 87968 |
| 87969 | 87970 |
| 87970 | 87968 |
| 87970 | 87969 |
有任何删除成对重复的建议吗?
您可以只更改相关连接的不等式条件。也就是说,改变这个:
where sp2.coll_num != sp.coll_num;
收件人:
where sp2.coll_num > sp.coll_num;
在我的工作中,我们的馆藏管理数据库 (CMS) 被导出到一个 MySQL 转储中。由于 CMS 的结构,来自 table 的多值字段在转储中被拆分为单独的 table,例如标本被分成标本(仅来自标本 table 的单值字段)和 specimens_mv(来自标本 table 的多值字段)。在我们的数据库中,您可以通过关联的 material 字段 link 共享数据的标本(例如,两个标本的收集器编号相同)。您必须进入每个记录以进行成对组合(即在记录 A 中插入记录 B,在记录 B 中插入记录 A)。我正在寻找彼此不恰当关联的标本记录:
SELECT
sp.specimen_num,
sp.barcode AS barcode_1,
sp.coll_name AS collector_1,
sp.coll_num AS coll_num_1,
mv.nomen_type_kind as type_2,
sp2.specimen_num AS specimen_num_2,
sp2.barcode AS barcode_2,
sp2.COLL_NAME AS coll_name_2,
sp2.COLL_NUM AS coll_num_2,
FROM
specimens_mv AS mv
JOIN
specimens AS sp ON mv.specimen_num = sp.specimen_num
JOIN
specimens AS sp2 ON mv.ASSOCIATED_MAT_SPECIMEN_NUM = sp2.specimen_num
where sp2.coll_num != sp.coll_num;
问题是这些成对的关联是相互关联的,并且通常有两个以上的样本关联在一起,例如
| specimen_num 1 | specimen_num 2 |
|----------------|----------------|
| 87969 | 87968 |
| 87969 | 87970 |
| 87970 | 87968 |
| 87970 | 87969 |
有任何删除成对重复的建议吗?
您可以只更改相关连接的不等式条件。也就是说,改变这个:
where sp2.coll_num != sp.coll_num;
收件人:
where sp2.coll_num > sp.coll_num;