[英]Enums for tables
我沒有找到有關enum
在https://code.kx.com/q/ref/enumerate/上的表域上的信息。 但是那里存在一些有趣的東西: https://code.kx.com/q/kb/linking-columns 。 我嘗試了這些示例,發現一個enum
結構在某些情況下表現得像普通枚舉,但在其他情況下表現得很奇怪。
q)kt:1!t:([]a:`a`b`c;b:10 20 30)
q)tt:([]k:`a`a`a`b;d:11 21 31 41)
q)show et1:`t!t[`a]?tt[`k]
`t!0 0 0 1
q)show et2:`kt$tt[`k]
`kt$`a`a`a`b
q)meta select k,d,et1,et2 from tt
c | t f a
---| ------
k | s
d | j
et1| j t
et2| s kt
q)select r1.a, r1.b, r2.a, r2.b from update r1:et1, r2:et2 from tt
a b a1 b1
----------
a 10 a 10
a 10 a 10
a 10 a 10
b 20 b 20
從這個角度來看, et1
和et2
都有相似的行為。 但是,如果我們檢查其他enum
屬性,我們會發現差異:
q)et2[0]
`kt$`a
q)et2[0]:`a
q)
q)et1[0]
`t!0
q)et1[0]:0 / neither works this
't
[0] et1[0]:0
^
q)et1[0]:(`a`b!(`a;10)) / nor that
't
[0] et1[0]:(`a`b!(`a;10))
^
如果我們只為鍵控表構建枚舉,情況似乎更奇怪:查看具有一個鍵列和兩個鍵列的表的區別:
q)kkt:2!t:([]a:`a`b`c;b:10 20 30;c:11 22 33)
q)kt:1!0!kkt
q)show ekkt:`kkt$((`a;10);(`b;20);(`b;20))
`kkt!0 1 1
q)show ekt:`kt$(`a`b`b)
`kt$`a`b`b
kkt
的相同硬編碼(帶有!
)枚舉表示法。
所以問題是:它們是什么? - 那些帶有熟悉的$
和硬編碼的枚舉!
表的符號? 是否可以為他們應用enum-extend
技術( ?
)以及如何? 他們有任何文件嗎?
您看到的是簡單外鍵和鏈接列之間的區別。 如文檔中所述,差異包括:
q)kt:([eid:1001 1002 1003] name:`Dent`Beeblebrox`Prefect; iq:98 42 126)
q)tdetails2:([] eid:1003 1001 1002 1001 1002 1001 777;sc:126 36 92 39 98 42 7)
q)update linker:`kt!((0!kt)`eid)?eid from `tdetails2
`tdetails2
q)select linker.name from tdetails2
name
----------
Prefect
Dent
Beeblebrox
Dent
Beeblebrox
Dent
對於簡單的外鍵,后者是不允許的。
另外我不知道你為什么要修改/編輯枚舉的值——不要那樣做!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.