mysql - 使用 JOIN 和 UNION 合并来自不同表的记录

标签 mysql

我需要创建一个查询来组合两个表中的数据,我认为可能是 JOIN 和 UNION 的组合。

在此示例中,我需要列出所有状态为事件的姓名,仅一次,以及他们对 Wine 、苏打水、晚餐、甜点和水果的偏好组合,按姓名排序。

我不确定单独使用 JOIN 是否可行,因为名称并不总是在两个表中,而且 UNION 很棘手,因为它们没有相同的列。我曾尝试使用空值来使 UNION 工作,但这一直为每个名称提供重复的行,而不是将它们按名称分组为一行。

DRINK
====================================
name         status   wine    soda
----------   ------   ------  ------
John Smith   active   red     cola
Mary Jones   active   white   lemonade
Tom Brown    old      red     fanta
Judy White   active   red     dr pepper
Sam Wing     old      red     cola

FOOD
=============================================
name         status   dinner  dessert  fruit
----------   ------   ------  ------   ------
John Smith   active   steak   muffin   apple
Mary Jones   active   fish    cake     kiwi
Walter Yu    active   pasta   cake     banana
Jim Adams    old      steak   candy    apple
Adam Sheers  active   pasta   candy    grapes

我需要查询来生成这样的结果 -

RESULT
==================================================================  
name         status    wine     soda       dinner  dessert  fruit
----------   ------    ------   ------     ------  ------   ------
Adam Sheers  active    -        -          pasta   candy    grapes
John Smith   active    red      cola       steak   muffin   apple
Judy White   active    red      dr pepper  -       -        -
Mary Jones   active    white    lemonade   fish    cake     kiwi
Walter Yu    active    -        -          pasta   cake     banana

非常感谢您对此提供的任何帮助!

最佳答案

这应该有效:

SELECT names.name, drink.wine, drink.soda, food.dinner, food.dessert, food.fruit
FROM
    (SELECT name FROM food WHERE status = 'active'
    UNION
    SELECT name FROM drink WHERE status = 'active') names
LEFT JOIN drink ON drink.name = names.name
LEFT JOIN food ON food.name = names.name

结果

|        NAME |   WINE |      SODA | DINNER | DESSERT |  FRUIT |
----------------------------------------------------------------
|  John Smith |    red |      cola |  steak |  muffin |  apple |
|  Mary Jones |  white |  lemonade |   fish |    cake |   kiwi |
|   Walter Yu | (null) |    (null) |  pasta |    cake | banana |
| Adam Sheers | (null) |    (null) |  pasta |   candy | grapes |
|  Judy White |    red | dr pepper | (null) |  (null) | (null) |

See it in action

关于mysql - 使用 JOIN 和 UNION 合并来自不同表的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287609/

相关文章:

mysql - 如何解决这个 MySQL 查询?

mysql - 是否所有 MySQL 都在笛卡尔积上加入选择?

mysql - 在 MySQL 中查找最近的评论日期 - 速度问题

php - 用于替代将数组存储在单个 MySQL 字段中的表结构

mysql - 如何从 Django 连接到 mysql 数据库?

mysql - 单个查询中来自多个碱基的计数

php - 在 mysql 更新查询中使用两个具有不同键的数组

MySQL - 选择不同的 2 列并返回所有

php - 安卓安全: Save a private String

php - 插入其他更新