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

标签 mysql sql

我有两个表:

    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/

相关文章:

mysql - 具有二进制信息的多行多列DB表的设计

sql - 错误: array value must start with "{" or dimension information LINE 1

mysql - 是否有任何 SQL 验证器可以针对多个数据库服务器检查语法?

mysql - 使用mysql查询获取一个月中星期日的所有日子?

mysql - Centos 7 上 MySQL 服务器的身份验证问题

mysql - 我是否要在现有列中插入或更新最大数量?

mysql - SQL 查询重复结果

mysql - 如何在 CakePHP 中创建具有多个 hasMany 关联的 mysql 表?

SQL 2008 Express (R2) : Creating an UPDATE trigger to update a table on another server?

sql - 在表中添加一个带有序列的新列 - Oracle