Effective OC: 6. 7. 8

本文深入探讨了Objective-C中的属性(property)概念及其重要特性,如getter和setter方法的自动生成、@dynamic关键字的使用及属性的不同属性(attribute),包括原子性、读写权限、内存管理方式等。同时,文章还讨论了在对象内部直接访问实例变量的重要性,并解释了如何正确实现对象的平等性(isEqual)和哈希(hash)方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6. 理解 属性 property 这一特性.

属性来封装对象中的数据,这些实例变量通过access方法来访问,即 getter和setter.  编译器会自动编写getter与setter, 开发者可以通过点语法 dot syntax来访问属性. 编译器将点语法转换为调用getter和setter,也就是点语法只是简单的语法糖而已.

使用@ dynamic关键字,在实现文件中,可以使编译器不自动创建gettersetter方法,且忽略编译时无法访问getter , setter的警告, 其访问方法可以在运行时,动态赋予.

属性 的attribute:

原子性: nonatomic  , 不设置nonatomic就是atomic原子的, 原子性极大访问降低效率.

读写权限: readwrite默认 ,readonly只读: 可以在声明中声称属性是只读,然后再class-continuation中重新定义为读写.

内存管理: 

assign: 对简单数据类型,即非对象的基础数据类型,进行赋值操作.

strong: 属性为拥有,即__strong

weak: 属性未非拥有,当对象被其他人释放时,该属性值为nil.

unsafe_unretained: 不安全的非持有状态,与assign的区别在于前者针对对象,而后者针对基础数据类型,与weak的区别在于其不安全,weak对象释放后为nil, 而这个不安全的属性值不会清空.

copy: 属性为持有状态,但是持有的不是设置的对象,而是该对象的copy, 这又涉及到copy与mutablecopy, 以及深浅赋值的内容. 设置该属性的目的是 创建赋值对象的不变版本,以保存这个可能会变化的值的当前属性值. 设置的对象必须实现NSObject的copy协议.

方法名: 属性可以指定方法名称,getter = ming , setter= ming , 以进行定制.


个人观点,对于一般私有不用于继承的属性,为了效率,都会直接访问属性本身,因为通过getter setter方法进行访问,本身效率就很低. 但是对于getter setter方法, 其对效率的提高还是有的. 但 对于创建消耗较大的对象, 使用getter 方法来实现延迟创建, 只有用到的时候才创建该对象, 而表示固定在初始化时创建, 这样对效率的提高还是很大的.


7. 在对象内部尽量直接访问实例变量

这里继续对属性进行讨论, 方法派发 method dispatch是很耗时的,与一般语言比起来,效率低太多,其他语言直接根据函数地址访问函数,而OC中,要发送消息,然后消息响应对象中寻找消息函数,然后调用.

所以,一般的做法都是,在类中直接访问实例变量, 而着重注意这些属性的初始化,以防直接访问未初始化的实例变量. 一般选择在构造函数中进行初始化,但是 如果调用setter方法进行初始化,调用的可能是子类派生的写法,所以也还是应该直接访问实例变量进行赋值.


所以说,对象内部尽量使用 直接访问, 而通过访问方法getter能够带来的速度提升,体现在 惰性初始化,延迟创建上, 对于耗费较大的对象,可以忽略调用的消耗,而强调延迟创建带来的效率提升. 


8. 理解equality 这一概念.

同其他语言一样, 直接对 实例对象进行== 判断,判断的是对象指针是否相等,即地址是否相同. 要实现真正的对象是否相同的判断, 要实现和使用NSObject 协议中的 

- (BOOL) isEqual: (id) object;

-(NSUInteger) hash;

如果两个对象使用isEqual 判断相等, 那么 hash必须返回相同的值 . 但是反之不是如此,即hash值相同但是两者并不一定isEqual .

而在isEqual中对两者是否相同的判断,一般先判断两者地址是否相同,地址相同一般是相同的,然后判断对象 的 类 是否相同, 但是基类和派生类的类是不相同的, 但是两者有可能是相同的, 所以要注意这一点,进行考虑.

hash 使用在collection中, 作为hash值,来进行索引. 设计一个相对合理 碰撞较少 且速度较快的 哈希算法. 

而在这里还需要注意的一点是, 在容器中加入可变对象后, 会引发一些不好的效果. 首先,collection在加入对象时,记录其hash值,而不再进行维护. 对collection里面的可变对象进行修改, 如果拿这个collection与其他collection进行比较,比较的是修改前的hash. 而如果在set中,对可变对象进行修改可以导致set中含有多个相同的对象.




D:\admin-project\guangxi-quan-vue3>npm run electron:build > flowoutdemo@0.0.0 electron:build > set ELECTRON_MIRROR=https://github.com/electron/electron/releases/download/ && npm run build && electron-builder -c.extraMetadata.main=electron/main.js > flowoutdemo@0.0.0 build > vite build vite v5.4.19 building for production... transforming (8) vite\preload-helper.js[@vue/compiler-sfc] ::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead of ::v-deep <inner-selector>. [@vue/compiler-sfc] ::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead of ::v-deep <inner-selector>. [@vue/compiler-sfc] ::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead of ::v-deep <inner-selector>. ✓ 136 modules transformed. dist/index.html 0.43 kB │ gzip: 0.28 kB dist/assets/index-fRN9Gjbe.css 3.24 kB │ gzip: 1.18 kB dist/assets/home-DQ_X9V7Z.css 7.87 kB │ gzip: 1.90 kB dist/assets/index-BweWhkAY.js 92.14 kB │ gzip: 36.63 kB dist/assets/home-BPoxZqS0.js 199.11 kB │ gzip: 69.78 kB ✓ built in 1.27s • electron-builder version=24.13.3 os=10.0.26100 • loaded configuration file=package.json ("build" field) • writing effective config file=dist_electron\builder-effective-config.yaml • packaging platform=win32 arch=x64 electron=36.4.0 appOutDir=dist_electron\win-unpacked • downloading url=https://cdn.npmmirror.com/binaries/electron/36.4.0/electron-v36.4.0-win32-x64.zip size=122 MB parts=8 • downloaded url=https://cdn.npmmirror.com/binaries/electron/36.4.0/electron-v36.4.0-win32-x64.zip duration=59.207s • default Electron icon is used reason=application icon is not set • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=3.117s ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195.7z -- Path = C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195\darwin\10.12\lib\libssl.dylib command='D:\admin-project\guangxi-quan-vue3\node_modules\7zip-bin\win\x64\7za.exe' x -bd 'C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195.7z' '-oC:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\720698195' workingDir=C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 3 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=3.324s ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751.7z -- Path = C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751\darwin\10.12\lib\libssl.dylib command='D:\admin-project\guangxi-quan-vue3\node_modules\7zip-bin\win\x64\7za.exe' x -bd 'C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751.7z' '-oC:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\361386751' workingDir=C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 2 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=2.856s ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147.7z -- Path = C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147\darwin\10.12\lib\libssl.dylib command='D:\admin-project\guangxi-quan-vue3\node_modules\7zip-bin\win\x64\7za.exe' x -bd 'C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147.7z' '-oC:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\333096147' workingDir=C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 1 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=2.843s ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515.7z -- Path = C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515\darwin\10.12\lib\libssl.dylib command='D:\admin-project\guangxi-quan-vue3\node_modules\7zip-bin\win\x64\7za.exe' x -bd 'C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515.7z' '-oC:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign\829590515' workingDir=C:\Users\49118\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 0 more times
06-07
✓ built in 273ms • electron-builder version=25.1.8 os=10.0.26100 • loaded configuration file=D:\Servers\scoring-vite\electron-builder.yml • writing effective config file=dist\builder-effective-config.yaml • skipped dependencies rebuild reason=npmRebuild is set to false • packaging platform=win32 arch=x64 electron=35.5.0 appOutDir=dist\win-unpacked • updating asar integrity executable resource executablePath=dist\win-unpacked\scoring-vite.exe • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=888ms ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527.7z -- Path = C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527\darwin\10.12\lib\libssl.dylib command='D:\Servers\scoring-vite\node_modules\7zip-bin\win\x64\7za.exe' x -snld -bd 'C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527.7z' '-oC:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\181911527' workingDir=C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 3 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=630ms ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283.7z -- Path = C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283\darwin\10.12\lib\libssl.dylib command='D:\Servers\scoring-vite\node_modules\7zip-bin\win\x64\7za.exe' x -snld -bd 'C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283.7z' '-oC:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\018897283' workingDir=C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 3 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=623ms ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011.7z -- Path = C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011\darwin\10.12\lib\libssl.dylib command='D:\Servers\scoring-vite\node_modules\7zip-bin\win\x64\7za.exe' x -snld -bd 'C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011.7z' '-oC:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\247004011' workingDir=C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 3 more times • downloading url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1 • downloaded url=https://npmmirror.com/mirrors/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=755ms ⨯ cannot execute cause=exit status 2 out= 7-Zip (a) 21.07 (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-12-26 Scanning the drive for archives: 1 file, 5635384 bytes (5504 KiB) Extracting archive: C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643.7z -- Path = C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643.7z Type = 7z Physical Size = 5635384 Headers Size = 1492 Method = LZMA2:24m LZMA:20 BCJ2 Solid = + Blocks = 2 Sub items Errors: 2 Archives with Errors: 1 Sub items Errors: 2 errorOut=ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643\darwin\10.12\lib\libcrypto.dylib ERROR: Cannot create symbolic link : �ͻ���û����������Ȩ�� : C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643\darwin\10.12\lib\libssl.dylib command='D:\Servers\scoring-vite\node_modules\7zip-bin\win\x64\7za.exe' x -snld -bd 'C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643.7z' '-oC:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\106761643' workingDir=C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign • Above command failed, retrying 3 more times
05-31
``` /*WITH recursive_hierarchy AS ( SELECT l5.id, l5.name, l5.level, l5.parent_id as parent_l5, l4.id as id_l4, l4.parent_id as parent_l4, l3.id as id_l3, l3.parent_id as parent_l3, l2.id as id_l2, l2.parent_id as parent_l2, l1.id as id_l1 FROM view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l5 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l4 ON l5.parent_id = l4.id AND l5.level = 5 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l3 ON COALESCE(l4.parent_id, l5.parent_id) = l3.id AND l5.level >= 4 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l2 ON COALESCE(l3.parent_id, l4.parent_id, l5.parent_id) = l2.id AND l5.level >= 3 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l1 ON COALESCE(l2.parent_id, l3.parent_id, l4.parent_id, l5.parent_id) = l1.id AND l5.level >= 2 )*/ SELECT id, name, level, -- parent_id, CASE WHEN level = 1 THEN CAST(id AS STRING) WHEN level = 2 THEN CONCAT_WS('.',CAST(id_l1 AS STRING) , CAST(id AS STRING)) WHEN level = 3 THEN CONCAT_WS('.',CAST(id_l1 AS STRING),CAST(id_l2 AS STRING), CAST(id AS STRING)) WHEN level = 4 THEN CONCAT_WS('.', CAST(id_l1 AS STRING), CAST(id_l2 AS STRING), CAST(id_l3 AS STRING), CAST(id AS STRING)) WHEN level = 5 THEN CONCAT_WS('.', CAST(id_l1 AS STRING), CAST(id_l2 AS STRING), CAST(id_l3 AS STRING), CAST(id_l4 AS STRING), CAST(id AS STRING)) END AS sort FROM ( SElECT l5.id, l5.name, l5.level, l5.parent_id as parent_l5, l4.id as id_l4, l4.parent_id as parent_l4, l3.id as id_l3, l3.parent_id as parent_l3, l2.id as id_l2, l2.parent_id as parent_l2, l1.id as id_l1 FROM view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l5 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l4 ON l5.parent_id = l4.id AND l5.level = 5 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l3 ON COALESCE(l4.parent_id, l5.parent_id) = l3.id AND l5.level >= 4 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l2 ON COALESCE(l3.parent_id, l4.parent_id, l5.parent_id) = l2.id AND l5.level >= 3 LEFT JOIN view.ic_dev15oc_mart.view_dwd_plm_imp_plm_pm_prj_t_17010_hw_dev15oc_1054010535 l1 ON COALESCE(l2.parent_id, l3.parent_id, l4.parent_id, l5.parent_id) = l1.id AND l5.level >= 2 )tt;```详细解读一下left join 部分,我不是很理解,越详细越好
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值