我想从两个中选出一个列。 我有一个表达式" l_entity_key~r_entity_key"对于LHS和RHS字段,我有"规则"中的l_entity_key,r_entity_key列。分别表。
我的实际要求是找到给定entity_key或l_entity_key的所有值,r_entity_key其中l_entity_key = 10或r_entity_key = 10。 e.g
10~11
10~13
6~10
4~10
值10可以出现在表达式的任一侧,我想要的是值11,13,6,4
。
我试图实现上述结果的基本sql查询是:
SELECT L_ENTITY_KEY, R_ENTITY_KEY FROM RULE
WHERE L_TYPE = 'Role'
AND R_TYPE='Role'
AND L_ENTITY_KEY = 10
OR R_ENTITY_KEY = 10;
当前输出:
L_ENTITY_KEY R_ENTITY_KEY
------------ ------------
9 10
10 11
4 10
6 10
预期产出:
ENTITY_KEY
----------
9
11
4
6
我尝试增强基本查询,尝试将两列合并为一个至少接近所需的结果,尝试自联接,右外连接和其他方式但我没有得到预期的输出。不共享其他查询以避免混淆,因为它们不接近期望的输出。
我怎么能这样做?
答案 0 :(得分:1)
这将结合两个结果:
SELECT L_ENTITY_KEY as ENTITY_KEY FROM RULE
WHERE L_TYPE = 'Role'
AND R_TYPE='Role'
AND R_ENTITY_KEY = 10
UNION
SELECT R_ENTITY_KEY FROM RULE
WHERE L_TYPE = 'Role'
AND R_TYPE='Role'
AND L_ENTITY_KEY = 10;
如果要保留重复项(即行UNION ALL
和UNION
的两行4
),则需要使用4~10
而不是10~4
。
答案 1 :(得分:1)
使用case
表达式返回关联值。类似的东西:
SELECT case when L_ENTITY_KEY = 10 then R_ENTITY_KEY else L_ENTITY_KEY end
FROM RULE
WHERE (L_TYPE = 'Role' AND L_ENTITY_KEY = 10)
OR (R_TYPE = 'Role' AND R_ENTITY_KEY = 10)