MySQL查询多个表的数据到列

标签 mysql join select

我需要从三个表中提取数据,并为每个用户在一行中返回结果。我还需要根据字段的值使用变量列名称。

我的查询是:

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;

希望它有用!

关于MySQL查询多个表的数据到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067156/

相关文章:

mysql - 如何按最近日期排序数据,然后按不同 ID 排序

php - 如何按旧日期获取多个表的行(逐行)

mysql - Zend 框架 - 连接查询

r - 在 R 中与 dplyr 连接时嵌套重复变量

mysql - 在考虑另一列的一列上选择 DISTINCT

使用带有选择的 channel 时的 Goroutine 死锁

mysql - 选择查询 zend 框架 2 的顺序和限制

php - 使用 http 请求程序,我可以发送键和值,但是当我通过浏览器发送相同的 url/编码值时,它无法接受值

php - 使用Ajax从mysql获取数据

MySQL如何制作FULL OUTER