1

问题是我有 DATA 和 SAT 表有 3 个字段,每个字段可能包含值 991。下面没有给出正确的列数,给出更多数据。如何获得正确的值。请指教

DATA

id
insurance1
insurance2
insurance3

SAT
id
insurance1
insurance2
insurance3

SELECT * FROM DATA v, SAT s where v.PRIMARY_INSURANCE_ID = '991' 
or v.INSURANCE_ID  = '991' 
or v.INSURANCE_ID = '991' 
and s.INSURANCE_ID = '991' 
or s.INSURANCE_ID = '991' 
or s.INSURANCE_ID = '991';

让我举个例子例子1

DATA    
    id
    insurance1 =991
    insurance2 =56
    insurance3 =22

    SAT
    id
    insurance1=56
    insurance2=23
    insurance3=96

When query is executed. The count should be 1

示例 2

DATA    
    id
    insurance1 =991
    insurance2 =56
    insurance3 =22

    SAT
    id
    insurance1=991
    insurance2=23
    insurance3=96

When query is executed. The count should be 2

示例 3

DATA    
    id
    insurance1 =991
    insurance2 =56
    insurance3 =991

    SAT
    id
    insurance1=991
    insurance2=23
    insurance3=96

When query is executed. The count should be 3 or 2
4

2 回答 2

2

我建议将其改写为join

SELECT *
FROM DATA v JOIN
     SAT
     ON '991' in (v.PRIMARY_INSURANCE_ID, v.INSURANCE_ID) AND 
        '991' in (s.INSURANCE_ID)

您的查询仅提及三个字段。您可以扩展in列表以包含所需的所有列。根据您的表结构:

SELECT *
FROM DATA v JOIN
     SAT
     ON '991' in (v.INSURANCE1, v.INSURANCE2, v.INSURANCE3) AND 
        '991' in (s.INSURANCE1, s.INSURANCE2, s.INSURANCE3);

编辑:

我不认为你想要一个join

select count(*), count(distinct id)
from (select id, insurance1 as insurance from data union all
      select id, insurance2 from data union all
      select id, insurance3 from data union all
      select id, insurance1 from sat union all
      select id, insurance2 from sat union all
      select id, insurance3 from sat
     ) i
where insurance = '991';

用于count(*)获取 3 和count(distinct id)获取 2。注意:后者假定id表之间的 s 匹配。

于 2014-10-20T12:07:43.057 回答
0

你有两张桌子,你想在其中数 991。所以这些表不一定相关,连接没有意义。只需添加两个计数:

select
  (select count(*) from data where 991 in (insurance1, insurance2, insurance3))
  +
  (select count(*) from sat where 991 in (insurance1, insurance2, insurance3));

顺便说一句:混合 AND 和 OR 时要小心 :-)

于 2014-10-20T12:55:07.397 回答