mysql子查询字段不存在,但全部查询

时间:2018-08-09 06:59:57

标签: mysql subquery

mysql> select id,mr_id,type from oh_mr_ocr_sub_info where mr_id in

 (select mr_id from oh_mr_base_info) limit 2;

+----+-------+--------------+
| id | mr_id | type         |
+----+-------+--------------+
|  2 |     7 | inhospital   |
|  3 |     7 | chemotherapy |
+----+-------+--------------+

2 rows in set (0.01 sec)

mysql> select mr_id from oh_mr_base_info;

ERROR 1054 (42S22): Unknown column 'mr_id' in 'field list'

oh_mr_base_info不包含字段mr_id; 但返回所有oh_mr_ocr_sub_info数据吗?为什么?

1 个答案:

答案 0 :(得分:0)

SQL可以这样运行:)

如果为表赋予别名,您将看到该查询将不再起作用

select a1.id,
       a1.mr_id,
       a1.type 
  from oh_mr_ocr_sub_info a1
 where a1.mr_id in (select b1.mr_id 
                   from oh_mr_base_info b1)
 limit 2;

以上内容会给您一个错误,指出b1.mr_id是无效的列。但是,如果您编写a1.mr_id,它将可以正常工作。

它与表别名不完全相关,但与表列有关。它看到mr_id不需要存在于B1中,它也可以存在于a1中。与选择常量

相同
select 111 from oh_mr_base_info;

只要oh_mr_base_info中有任何数量的记录,查询将返回111。始终建议对此类问题使用表别名