首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择多行组合(MySQL)

如何选择多行组合(MySQL)
EN

Stack Overflow用户
提问于 2011-09-08 06:08:03
回答 1查看 214关注 0票数 1

我正在编写一个查询,能够检查同一用户的多行。如果同一用户的记录组合没有提供我需要的信息(请记住,它是用户拥有的所有记录的组合,而不是单个记录的组合),则认为该用户已通过。

例如:有两个表。

一个是"user“,保存用户的个人信息:

代码语言:javascript
复制
id client_id first_name last_name date_of_birth ssn address

另一种是“筛选”,保存用户的体检信息:

代码语言:javascript
复制
id user_id date cholesterol ldl hemoglobin triglycerides mcv glucose 
mchc ha1c plateletcount.

一个用户在用户表中只能有一条记录,但在筛选表中可以有多条记录。我想要做的是检查属于同一用户的用户的多个筛选记录,看看这些记录的组合是否提供了我需要的必要信息。如果不是,则选择该用户。例如,必要的信息包括胆固醇、低密度脂蛋白、甘油三酯、葡萄糖或。如果用户有两条筛选记录,一条记录提供cholesterol(NOT NULL),另一条记录提供triglycerides(NOT NULL)glucose(NOT NULL)ha1c(NOT NULL)。他被选中是因为缺少低密度脂蛋白。

我如何编写能够做到这一点的查询呢?我尝试过内部连接,但似乎不起作用。这里有一些要求。对于胆固醇、低密度脂蛋白和甘油三酯,只要其中一种缺失,就应该选择使用者。但是对于葡萄糖和ha1c,只有当两者都缺失时,用户才会被选中。

我尝试过的一个查询是这样的:

代码语言:javascript
复制
    SELECT users.id AS user_id, users.first_name, users.last_name, clients.name AS client, 
    users.social_security_number AS ssn, users.hiredate, hra.id AS hra_id, hra.date AS hra_date, hra.maileddate AS hra_maileddate, 
    screening.id AS screening_id, screening.date AS screening_date, screening.maileddate AS screening_maileddate, group_concat(screening.glucose), group_concat(screening.ha1c)
    FROM users 
    INNER JOIN clients
    ON(
       users.client_id = clients.id
       )
    INNER JOIN hra
    ON(
       users.id = hra.user_id
       AND hra.date BETWEEN '2011-07-01' AND '2011-11-15'
       AND hra.maileddate IS NOT NULL 
       )
    LEFT JOIN screening
    ON(
       users.id = screening.user_id
    AND screening.date BETWEEN '2011-05-15' AND '2011-11-15'
    AND screening.maileddate IS NULL   
    AND (screening.cholesterol IS NULL
        OR screening.ldl IS NULL
        OR screening.triglycerides IS NULL)
    AND screening.glucose IS NULL 
    AND screening.ha1c IS NULL
    AND (screening.weight IS NULL
        OR screening.systolic IS NULL
        OR screening.diastolic IS NULL)
    )
    WHERE users.client_id = '1879'      


    GROUP BY users.id
EN

回答 1

Stack Overflow用户

发布于 2011-09-08 06:23:16

我认为您必须在WHERE中使用EXISTS()子查询。就像这样

代码语言:javascript
复制
SELECT ...
FROM users 
INNER JOIN clients ON(users.client_id = clients.id)
INNER JOIN hra ON(...)
WHERE users.client_id = '1879'
   AND(EXISTS(SELECT 1 FROM screening WHERE(users.id = screening.user_id)AND(...)))

或者NOT EXISTS,这取决于您如何编写您的标准。

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

https://stackoverflow.com/questions/7341090

复制
相关文章

相似问题

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