gpt4 book ai didi

mysql - 如何从给定行条件的表中选择所有行?

转载 作者:行者123 更新时间:2023-11-29 12:42:13 25 4
gpt4 key购买 nike

我有两个表:

    users
| id | name |
|----|--------|
| 0 | Bob |
| 1 | Ted |

parameters
| id | parameter | value |
|----|-----------|--------|
| 0 | a | 5 |
| 0 | b | 9 |
| 0 | c | 0 |
| 1 | a | 27 |
| 1 | b | 0 |

*parameters.id references users.id

不幸的是,标准化值的唯一方法是采用提供的形式。参数对于所有用户来说不是一致的,并且不能是列。

我必须始终为每个用户选择所有参数及其值,但是我可能需要查询参数以获得某些值(同时仍然获取用户的所有行。)

例如,我可能想要获取参数 a 的值大于 10 的所有参数。这将返回:

| id | name  |  parameters |  values  |
|----|-------|-------------|----------|
| 1 | Ted | a,b | 27,0 |

我可以从参数表中获取所有数据,但我不知道如何有条件地选择数据:

SELECT a.*, b.params, b.values
FROM users AS a
JOIN (
SELECT id, GROUP_CONCAT(parameters) AS params, GROUP_CONCAT(value) AS values
FROM parameters
GROUP BY id
) b
ON a.id=b.id

有没有办法实现这一点,或者有更好的数据库设计吗?

(如果有人对这个问题有更好的标题......请随意)

最佳答案

假设您想要忽略参数 a > 10(完全)的用户,这将获得包含该示例数据的一行的预期输出:

fiddle 测试: http://sqlfiddle.com/#!2/d70d5/5/0

select p.id,
u.name,
group_concat(p.parameter) as params,
group_concat(p.value) as vals
from parameters p
join users u
on p.id = u.id
join (select id
from parameters
where parameter = 'a'
and value > 10) v
on p.id = v.id
group by p.id, u.name

但是,如果您希望参数 a 仅在大于 10 时返回,但仍然显示用户的其他参数,您可能需要:

fiddle 测试: http://sqlfiddle.com/#!2/d70d5/4/0

select p.id,
u.name,
group_concat(p.parameter) as params,
group_concat(p.value) as vals
from parameters p
join users u
on p.id = u.id
where (p.value > 10 and p.parameter = 'a')
or p.parameter <> 'a'
group by p.id, u.name

(请注意,Bob 的参数 a 的值 5 不会被返回,因为 5 < 10,而 Ted 的参数 a 的值 27 会被返回,因为 27 > 10,并且无论如何都会返回 b 和 c 的值)

关于mysql - 如何从给定行条件的表中选择所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950699/

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