我需要创建一个查询来组合两个表中的数据,我认为可能是 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/