我有以下列: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)|
提前感谢大家的帮助:)
1条答案
按热度按时间ryevplcw1#
您可以自连接该表以获得一系列具有每个父代的子代的行,并按父代分组。然后,您可以使用的一个巧妙技巧是获取max和min
customer_id
,如果它们相同,则使用case
表达式显示它们,否则使用null
:字符串
请注意,
p.customer_id
上的分组实际上对分组没有任何影响,因为p.id
对于每个父对象都是唯一的,但它允许我们避免选择列表中的非组表达式错误。