gpt4 book ai didi

mysql - mysql查询的左连接还是联合?

转载 作者:行者123 更新时间:2023-11-29 23:22:10 25 4
gpt4 key购买 nike

我在查询中遇到困难,我尝试过 UNION 但它需要相同数量的列结果,所以它不好,这就是我想要做的:

我正在尝试从表操作中选择最新行:

 action_id INT  |  media_id INT |   badge_id INT  | performed_at TS
______________________________________________________________
1 | 365 | NULL | timestamp
2 | NULL | 26 | timestamp
3 | 62 | NULL | timestamp

如果media_id不为NULL,我想从表标题中获取相应的行,如果badge_id不为NULL,我想从表徽章中获取相应的行。

所以我尝试了这个(但它不起作用,因为标题和徽章没有相同的列数):

 (SELECT * FROM actions, actions_type, a3m_account, title 
WHERE actions.type_id = actions_type.type_id
AND actions.performed_by_user_id = a3m_account.id
AND actions.media_id = title.media_id)

. ' UNION '

(SELECT * FROM actions, actions_type, a3m_account, badges
WHERE actions.type_id = actions_type.type_id
AND actions.performed_by_user_id = a3m_account.id
AND actions.badge_id = badges.badge_id)


. 'ORDER BY performed_at DESC '
. 'LIMIT 10';

编辑:我基本上是在创建一个 Twitter 风格的提要,其中包含在网站上采取的所有操作。其中一些操作与媒体(表格标题)相关,其他操作与徽章(表格徽章)相关。我想获取最后的操作及其相关数据(问题是相关数据必须来自具有不同列的不同表)。

我该怎么做?

最佳答案

由于 UNION 仅适用于具有相同架构的表,因此您必须编写的查询具有以下结构(您尚未指定所需的字段):

 (SELECT <1st field list> 
FROM actions, actions_type, a3m_account, title
WHERE actions.type_id = actions_type.type_id
AND actions.performed_by_user_id = a3m_account.id
AND actions.media_id = title.media_id)

UNION

(SELECT <2nd fields list>
FROM actions, actions_type, a3m_account
WHERE actions.type_id = actions_type.type_id
AND actions.performed_by_user_id = a3m_account.id
AND actions.badge_id = badges.badge_id)

在<第一个字段列表>和<第二个字段列表>中,两个字段列表中的字段数量和类型必须相同。如果需要,您可以使用 AS 子句,以便两个列表中具有相同的字段名称。

示例:

SELECT actions.action_id, actions.media_id AS additional_info
FROM ...
UNION
SELECT actions.action_id, actions.badge_id AS additional_info
FROM ...

关于mysql - mysql查询的左连接还是联合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27214387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com