在查询的WHERE部分,我们有
SELECT * FROM SomeTable st
WHERE
NOT EXISTS
(SELECT 1 FROM Tab t1 WHERE t1.A = st.A OR t1.B = st.A)
OR EXISTS
(SELECT 1 FROM Tab t2 WHERE (t2.A = st.A OR t2.B = st.A) AND t2.C IS NULL)
似乎是合并的好候选人...... 但是我在没有任何想法的情况下盯着它看了一个小时。
你有什么想法吗?
谢谢,
答案 0 :(得分:2)
SELECT distinct st.*
FROM SomeTable st
left outer join Tab t
on st.a in (t.a,t.b)
WHERE t.c is null
有时最简单的答案是使用连接而不是存在。
答案 1 :(得分:0)
尝试:
NOT EXISTS (SELECT 1 FROM Tab WHERE (Tab.A = @Id OR Tab.B = @ID)
AND (Tab.C is null OR Tab.C != @Var))
答案 2 :(得分:0)
我想我已经知道了
SELECT * FROM SomeTable st
WHERE
0 = (SELECT SUM (NVL(t1.C,0) FROM Tab t1 WHERE t1.A = st.A OR t1.B = st.A)
你怎么看?
当然,这只适用于'C'预计为NULL的情况。
如果我们期待一些价值,我认为检查
@SomeValue IN (SELECT t1.C FROM Tab t1 WHERE t1.A = st.A OR t1.B = st.A)
会吗?
答案 3 :(得分:0)
它看起来好像你试图返回所有SomeTable值,其中Tab上没有相应的值,其中C不为null - 在这种情况下,以下内容应该有效:
SELECT * FROM SomeTable st
WHERE NOT EXISTS
(SELECT 1 FROM Tab t1 WHERE (t1.A = st.A OR t1.B = st.A) AND t2.C IS NOT NULL)
但是,这不是完全现有查询的作用 - 在查询中,如果Tab上有两条相应的记录,其中一条记录的C为非空值,另一条记录为null ,您的查询将返回相应的行,但我的查询不会。