gpt4 book ai didi

连接不匹配行时使用连接的MySql返回数据

转载 作者:行者123 更新时间:2023-11-29 02:13:43 25 4
gpt4 key购买 nike

我有两个表,我正在从中提取数据

自动柜员机

[ID][所有者][余额][状态]

ATMA头像

[ATMID][头像][管理员][允许][受限][限制]

我当前的查询是

SELECT ATM . * , ATMAvatar.Avatar AS User, ATMAvatar.Admin, 
ATMAvatar.Allowed, ATMAvatar.Limited, ATMAvatar.Limit,
(SELECT COUNT( * ) FROM ATMAvatar WHERE ATMID = '{SOME ATM ID}') AS UserCount
FROM ATM
JOIN ATMAvatar ON ATM.ID = ATMAvatar.ATMID
WHERE ATM.ID = '{SOME ATM ID}'
AND ATMAvatar.Avatar = '{SOME NAME}'

如果 ATMAvatar 和 ATM 都有相对的行,这会很好地工作。我希望能够对此进行转换,以便在找不到 ATMAvatar 行的情况下,仍然会为任何 ATMAvatar 列选择具有一些默认值的 ATM。

例如

  • 编号:d7dafb52-bc31-4f38-a433-7c273b345454
  • 所有者:汤姆·汉森
  • 余额:0
  • 状态:0
  • 用户:James McCrawford(从查询中获取)因为该行不会返回
  • 管理员:0(行不可用所以不能是管理员)
  • 允许:0(行不可用所以不允许)
  • 有限:1(行不可用所以肯定限制)
  • 限制:0(行不可用,因此限制为 0 美元)
  • 用户数:15

如果它只是返回空行我会很高兴,我可以在 php 中检查它。

编辑我的问题是我正在选择不包含他的行中搜索 James McCrawford。我想我需要重新考虑查询的结构

最佳答案

您可以使用 LEFT JOIN为此,例如:

SELECT ATM . * , ATMAvatar.Avatar AS User, ATMAvatar.Admin, 
ATMAvatar.Allowed, ATMAvatar.Limited, ATMAvatar.Limit,
(SELECT COUNT( * ) FROM ATMAvatar WHERE ATMID = '{SOME ATM ID}') AS UserCount
FROM ATM
LEFT JOIN ATMAvatar ON ATM.ID = ATMAvatar.ATMID
WHERE ATM.ID = '{SOME ATM ID}'
AND (ATMAvatar.Avatar = '{SOME NAME}' OR ATMAvatar.Avatar IS NULL)

这将返回 ATM 中的所有记录不管ATMAvatar中是否有匹配的记录.所有 ATMAvatar结果行中的相关字段将为 null对于 ATM记录没有任何ATMAvatar .

关于连接不匹配行时使用连接的MySql返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627484/

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