MySQL连接仅当选定的行具有相同的值,否则返回null

n53p2ov0  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(119)

我有以下列:id,parent_id,customer_id。我想选择所有具有customer_id的父行,如果父行和所有子行具有相同的值,则应具有单元格的值,或者如果customer_id在所有行中不相等,则为null(或0)。
| 描述|ID|父ID|客户标识|
| --|--|--|--|
| 这是父行|第一章| 0 | 101 |
| 这是行id = 1的子行| 2 |第一章| 101 |
| 这是行id = 1的子行| 3 |第一章| 101 |
| 这是父行|4| 0 | 103 |
| 这是行id = 4的子行| 5 |4| 104 |
| 这是行id = 4的子行| 6 |4| 104 |
| 这是父行|7| 0 | 101 |
| 这是行id = 7的子行| 8 |7| 104 |
| 这是行id = 7的子行| 9 |7| 101 |
我正在寻找将返回结果的查询:
| ID|客户标识|
| --|--|
| 1 | 101 |
| 4 |null(或0)|
| 7 |null(或0)|
提前感谢大家的帮助:)

ryevplcw

ryevplcw1#

您可以自连接该表以获得一系列具有每个父代的子代的行,并按父代分组。然后,您可以使用的一个巧妙技巧是获取max和min customer_id,如果它们相同,则使用case表达式显示它们,否则使用null

SELECT   p.id AS id,
         CASE WHEN MAX(c.customer_id) = p.customer_id AND 
                   MIN(c.custoemr_id) = p.customer_id
              THEN p.customer_id
              END AS customer_id
FROM     mytable p
JOIN     mytable c ON p.id = c.parent_id
GROUP BY p.id, p.customer_id

字符串
请注意,p.customer_id上的分组实际上对分组没有任何影响,因为p.id对于每个父对象都是唯一的,但它允许我们避免选择列表中的非组表达式错误。

相关问题