gpt4 book ai didi

mysql - 如何选择多行的组合(MySQL)

转载 作者:行者123 更新时间:2023-11-30 23:35:59 24 4
gpt4 key购买 nike

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

例如:有两个表。

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

id client_id first_name last_name date_of_birth ssn address

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

id user_id date cholesterol ldl hemoglobin triglycerides mcv glucose 
mchc ha1c plateletcount.

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

我该如何编写能够做到这一点的查询?我尝试了 inner join,但它似乎不起作用。这里有一些要求。对于胆固醇、低密度脂蛋白和甘油三酯,只要缺少其中一项,用户就应该选择。但对于 glucose 和 ha1c,只有在两者都缺失时才会选择用户。

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

    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

最佳答案

我认为您必须在 WHERE 中使用 EXISTS() 子查询。有点像

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,具体取决于您编写标准的方式。

关于mysql - 如何选择多行的组合(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com