首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回更多值的MYSQL查询

返回更多值的MYSQL查询
EN

Stack Overflow用户
提问于 2014-10-20 12:03:56
回答 2查看 80关注 0票数 1

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-20 12:55:07

你有两张桌子,你想数到991。因此,这些表不一定是相关的,连接也没有任何意义。只需将这两个计数相加:

代码语言:javascript
复制
select
  (select count(*) from data where 991 in (insurance1, insurance2, insurance3))
  +
  (select count(*) from sat where 991 in (insurance1, insurance2, insurance3));

顺便说一句:当混合和OR:-时要小心。

票数 0
EN

Stack Overflow用户

发布于 2014-10-20 12:07:43

我建议把它重新定义为join

代码语言:javascript
复制
SELECT *
FROM DATA v JOIN
     SAT
     ON '991' in (v.PRIMARY_INSURANCE_ID, v.INSURANCE_ID) AND 
        '991' in (s.INSURANCE_ID)

您的查询只提到三个字段。可以扩展in列表,使其具有所需的所有列。根据您的表结构:

代码语言:javascript
复制
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

代码语言:javascript
复制
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匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26465272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档