我有两张桌子A和B:
看起来像:
id ColumnA
-----------
1 A1
5 A5
7 A7
B看起来像:
id ColumnB
-----------
1 B1
3 B3
5 B5
8 B8
我想要像表B那样的结果,即(id,ColumnB)应该是表B中但不在表A中的值。
因此,结果应如下所示:
Id ColumnB
-----------
3 B3
8 B8
我怎样才能有效地做到这一点?
我尝试使用左连接和内连接然后减去但我认为它可以以更好的方式完成..建议?
答案 0 :(得分:3)
使用NOT EXISTS
执行此操作
select id, ColumnB
from tableB B
where not exists (select 1 from tableA A where B.Id = A.Id)
答案 1 :(得分:3)
使用NOT EXISTS
谓词
SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.ID = B.ID)
答案 2 :(得分:2)
SELECT *
FROM B
WHERE id NOT IN (SELECT ID FROM A)
查看您描述的两个表,id
似乎在两个表中都不可为空,因此上述查询将起作用。但是,在子查询可能返回IN
值的情况下,您应该谨慎使用NULL
。
答案 3 :(得分:1)
如果使用左连接,则可以过滤掉where子句中表A中的值,即
task getDistributionValues {
fileTree(dir: 'build/tmp/distribution/', include: '*.zip').visit { FileVisitDetails details ->
distributionZips << details.file.name
println('printvalues'+distributionZips)
}
}
getDistributionValues.dependsOn(getDistribution)
def distributionComponentName
task unzipDistribution(type:Copy){
distributionZips.each { unzipNames ->
distributionComponentName = unzipNames.substring(0,unzipNames.length()-15)
println('comp Name here'+distributionComponentName)
def zipFile = file('build/tmp/distribution/'+unzipNames)
into project.buildDir
from(zipTree(zipFile)) {
into 'tmp/unzipComponent/'+distributionComponentName
}
}
}
unzipDistribution.dependsOn(getDistributionValues)
答案 4 :(得分:0)
Select * From B
Where Not Exists (Select null From A Where A.ID = B.ID)