我有以下表格
TabA
| 名称|数量|batchNo| tabType|
| --|--|--|--|
| X| 200 |null|一|
| X| 200 |null|一|
| X| 100 |null|一|
TabB
| 名称|数量|batchNo| tabType|
| --|--|--|--|
| X| 500 |null| B|
| Y| 50 |null| B|
我试图从表B中获取行,除非表A中已经有相同名称的行。问题似乎很容易,但我找不到优雅的解决方案。
我试图让
| 名称|数量|batchNo|
| --|--|--|
| X| 200 |null|
| X| 200 |null|
| X| 100 |null|
| Y| 50 |null|
当我联合所有两个表时,
塔贝拉联盟酒店
| 名称|数量|batchNo|
| --|--|--|
| X| 200 |null|
| X| 200 |null|
| X| 100 |null|
| X| 500 |null|
| Y| 50 |null|
我创建了(丑陋的)代码,看起来像这样
With UNI as
(Select * from TabA UNION ALL TabB)
Select * from UNI U
where
(EXISTS (Select 1 from UNI B where a.name=b.name and a.tabType<>b.tabType and NVL(a.batchNo)=NVL(b.batchNo)) and a.tabType ='A')
OR
NOT EXISTS (SELECT 1 from a.name=b.name and a.tabType<>b.tabType)
字符串
有没有一种方法可以参数化UNION,使它看起来更好?提前感谢任何帮助。
1条答案
按热度按时间efzxgjgh1#
从表B中获取行,除非表A中已经有行同名。
如果是这样的话,你为什么还要检查其他栏目?如果我们继续问问题,那么-
样本数据:
字符串
Query看起来像这样:
型