mysql子查询问题(很奇葩的子查询)

2025-04-02 01:48:32
推荐回答(2个)
回答1:

我做了测试(select admin_type from cool_admin where admin_name ='admin')的结果是id

但是select (select admin_type from cool_admin where admin_name ='admin') from `tk_team` left join tk_user using(id)的结果为:

select id from `tk_team` left join tk_user using(id) 的结果为:

是有点费解,结果数相同,但是查询结果不一样,说明mysql还是不支持值得传递

回答2:

Semi-join 限制

不过并不是所有子查询都是半联接,必须满足以下条件:

  • 子查询必须是出现在顶层的 WHERE、ON 子句后面的 IN 或者 =ANY
  • 子查询必须是单个 select,不能是 union;
  • 子查询不能有 group by 或者 having 子句(可以用 semijoin materialization 策略,其他不可以 );
  • It must not be implicitly grouped (it must contain no aggregate functions). (不知道啥意思,保持原文);
  • 子查询不能有 order by with limit;
  • 父查询中不能有 STRAIGHT_JOIN 指定联接顺序;
  • The number of outer and inner tables together must be less than the maximum number of tables permitted in a join.