我有两个表有一个公共列,一个标识值可以重复(对同一文档的几个观察)。
一个例子:
表A :
A_identifier | Value
-------------+-------
1 | A
1 | B
表B :
B_identifier | A_identifier | Value
-------------+--------------+-------
1 | 1 | A
2 | 1 | B
3 | 1 | B
4 | 1 | C
上面的例子说明了我在我的数据中寻找的情况类型 - 我们在TableA
中有一个具有多个值的案例,其中一些在TableB
中是相同的,有些则不是。因此TableA.Value
和TableB.Value
代表相同的概念。
我想知道每个TableA.A_identifier
,TableB
的行数与TableA.Value
的值不同。如果每个A_identifier
只有一个观察点,则可以使用not
来解决,但多个可能的值会阻止此情况。
我想做的事情是这样的(不起作用):
select distinct
b.B_identifier, a.A_identifier
from
TableB b
join
TableA a in b.A_identifer = a.A_identifier and b.Value != a.Value
虽然查询在技术上有效,但它返回错误的结果 - 它会计算给定行中TableA
和TableB
中的值不同的所有情况。不过,我希望它只计算TableB
中每个TableA
A_identifier
中根本不存在的值。
我尝试将!=
替换为not in
,这是我为静态参数所做的。
我希望我的问题有道理,有人可以提供帮助。提前谢谢。
答案 0 :(得分:1)
使用NOT EXISTS
select t1.A_identifier, count(t2.value)
from TableA t1
left join TableB t2 on t1.A_identifier = t2.A_identifier and
NOT EXISTS (
select 1
from TableA t3
where t3.A_identifier = t2.A_identifier and
t3.Value = t2.Value
)
group by t1.A_identifier
答案 1 :(得分:1)
尝试此查询,如果它适合您,
Value
但是,如果您想获得每个SELECT b.A_identifier, b.Value, TOTAL_COUNT = COUNT(b.A_identifier)
FROM TableB b
LEFT JOIN TableA a
ON b.A_identifier = a.A_identifier
AND b.Value = a.Value
WHERE a.A_identifier IS NULL
AND EXISTS (SELECT 1
FROM TableA c
WHERE b.A_identifier = c.A_identifier)
GROUP BY b.A_identifier, b.Value
private void searchUserByEmail(final String searchText) {
DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
Query query = mFirebaseDatabaseReference.child(Constants.FB_TABLE_USERS).orderByChild(Constants.FB_EMAIL).equalTo(searchText);
query.addListenerForSingleValueEvent(new ValueEventListener() {
}}
答案 2 :(得分:0)
以下SQL怎么样?
select distinct TableA.A_identifier,
(select count(*) from TableB
where TableB.A_identifier = TableA.A_identifier
and not exists(
select * from TableA where A_identifier = TableB.A_identifier
and Value = TableB.Value)
)
as TableB_Rows
from TableA