mysql - MySQL查询具有数据到列的多个表
问题描述
我需要从三个表中提取数据,并为每个用户在一行中返回结果。我还需要根据字段的值使用可变列名。
我的查询是:
SELECT u.USER_ID, u.FIRST_NAME, d.FIELD_ID, d.DATA, f.LABEL, f.TYPE
FROM users as u, fields as f, fieldsData as d
WHERE d.USER_ID=u.USER_ID AND f.FIELD_ID=f.FIELD_ID;
我得到的结果是:
|------------|-------------|----------|-----------|---------|----------|
| USER_ID | FIRST_NAME | FIELD_ID | DATA |LABEL | TYPE |
|------------|-------------|----------|-----------|---------|----------|
| 1 | John | 1 | Cookies | Dessert | TEXT |
| 1 | John | 2 | Chocolate | Flavor | TEXT |
| 1 | John | 3 | Milky Way | Candy | TEXT |
| 2 | Sally | 1 | Brownies | Dessert | TEXT |
| 2 | Sally | 3 | Snickers | Candy | TEXT |
|------------|-------------|----------|-----------|---------|----------|
我需要的是每个用户只有一行,其中包含字段/字段数据值的列。像这样的东西:
|------------|-------------|--------------|----------|---------------|---------------|------------|
| FIRST_NAME | Dessert | Dessert_TYPE | Flavor | Flavor_TYPE | Candy |Candy_TYPE |
|------------|-------------|--------------|----------|---------------|---------------|------------|
| John | Cookies | TEXT | Chocolate| TEXT | Milky Way | TEXT |
| Sally | Brownies | TEXT | NULL | NULL | Snickers | TEXT |
|------------|-------------|--------------|----------|---------------|----------------|------------|
真的可以在这方面使用一些帮助!谢谢!!
用户表:
|------------|-------------|--------------|
| USER_ID | FIRST_NAME | LAST_NAME |
|------------|-------------|--------------|
| 1 | John | Smith |
| 2 | Sally | Jones |
|------------|-------------|--------------|
字段表:
|------------|-------------|--------------|
| FIELD_ID | LABEL | TYPE |
|------------|-------------|--------------|
| 1 | Dessert | TEXT |
| 2 | Flavor | TEXT |
| 3 | Candy | TEXT |
|------------|-------------|--------------|
字段数据表:
|------------|-------------|--------------|---------------|
| DATA_ID | USER_ID | FIELD_ID | DATA |
|------------|-------------|--------------|---------------|
| 1 | 1 | 1 | Cookies |
| 2 | 1 | 2 | Chocolate |
| 3 | 1 | 3 | Milky Way |
| 4 | 2 | 1 | Brownies |
| 5 | 2 | 3 | Snickers |
|------------|-------------|--------------|---------------|
解决方案
您必须进行 INNER JOIN:
SELECT u.USER_ID, u.FIRST_NAME, d.FIELD_ID, d.DATA, f.LABEL, f.TYPE
FROM fieldsData as d
INNER JOIN users as u ON d.USER_ID = u.USER_ID
INNER JOIN fields as f ON d.FIELD_ID = f.FIELD_ID;
我希望它可以有用!
推荐阅读
- javascript - 有没有办法获取一个函数可能访问的对象的所有属性?
- c - 我正在尝试确定在 do-while 中输入的学生人数,并在循环外显示数字
- sql - 为什么我的在线 SQL 编辑器看不懂 group_concat_max_len?
- csv - 如果存在,我如何删除/回收/删除 csv 文件
- python - 通过输入打印变量
- tensorflow - Tensorflow 使用迁移学习错误生成器识别花朵
- algorithm - 非阻塞可更新优先级队列
- javascript - 在 Firefox 中,如何在本地文件中运行 javascript,例如 file:///C:/play/my.html
- javascript - 如何更改数组的值并存储在新数组中?
- laravel-5 - Laravel 背包“不了解用户登录角色和权限”