gpt4 book ai didi

MySQL:使用if else在select语句中进行子查询

转载 作者:行者123 更新时间:2023-12-01 00:51:58 25 4
gpt4 key购买 nike

我想显示成员列表及其状态(uid、uname、uAddress、status)。我想检查 T1 表中的 uid 在 T2 表中存在的位置,即(T1.uid = T2.uid 和 tl_u_id='3')如果存在,则状态将为是,否则为否。 (tl_u_id 列值应该是在查询中硬编码)

 Table T1 (Primary key: uid)                  Table T2 (primary_key: Aid)

-------------------- ---------------------------
uid uname uAddress uid Aid tl_u_id ename
-------------------- ---------------------------
1 aa ch 2 1 3 TG
2 bb LA 4 2 3 IS
3 cc NY 2 3 4 DS
4 dd DC
-------------------- --------------------------

Result for tl_u_id=3
-------------------------
uid uname uAddress status
-------------------------
1 aa ch No
2 bb LA Yes
3 cc NY No
4 dd DC yes

请提供最好的方法。

最佳答案

有几种获取结果集的方法。

如果您要返回一小组行,使用相关子查询会很快。

SELECT u.uid
, u.uname
, u.uAddress
, IFNULL(
(SELECT 'Yes'
FROM T2 s
WHERE s.uid = t.uid
AND s.tl_u_id = '3'
LIMIT 1
)
),'No') AS status
FROM T1 u

但这不一定是获取结果集的最佳方式,除了小集(由于 MySQL 处理子查询的方式,对于外部查询中的每一行),对于大集来说可能是昂贵的。

另一种方式,如果您要返回 T1 中的所有行或大部分行,并且 T2 中没有很多不匹配 uid 的 uid 值T1 中的值,这样效率更高:

SELECT u.uid
, u.uname
, u.uAddress
, IF(s.uid IS NOT NULL,'Yes','No') AS status
FROM T1 u
LEFT
JOIN (SELECT r.uid
FROM T2 r
WHERE r.tl_u_id = '3'
GROUP BY r.uid
) s
ON s.uid = u.uid

如果您可以保证 T2(uid,tl_u_id) 是唯一的,或者至少对于具有 tl_u_id='3' 的给定 uid 不会有任何重复项>,那么您可以通过消除内联 View 来获得更好的性能。

为了获得最佳性能,您可能需要一个索引...ON T2 (tl_u_id, uid)

关于MySQL:使用if else在select语句中进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597973/

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