假设存在两个表: sql create table darcy1( ima01 varchar(40), ima02 varchar(40), ima021 varchar(200) ); create table darcy2( ima01 varchar(40), ima02 varchar(40) ) 运行下面代码不会出错,darcy2虽然没有ima0
假设存在两个表:
1
2
3
4
5
6
7
8
9
| create table darcy1(
ima01 varchar(40),
ima02 varchar(40),
ima021 varchar(200)
);
create table darcy2(
ima01 varchar(40),
ima02 varchar(40)
)
|
运行下面代码不会出错,darcy2虽然没有ima021字段,但是SQL能匹配到darcy1有ima021字段,所以ima021字段被省略了。
1
2
3
| select * from darcy1 where (ima01,ima02,ima021) in (
select ima01,ima02,ima021 from darcy2 where ima01 like 'M%'
)
|
以上代码结果等价于:
1
2
3
| select * from darcy1 where (ima01,ima02) in (
select ima01,ima02 from darcy2 where ima01 like 'M%'
)
|
所以嵌套的时候,如果两个表字段有可能重复,子查询中请尽量用表名.字段的形式。