sqlite3多表查询where出来的事多个值,为啥只执行第一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite3多表查询where出来的事多个值,为啥只执行第一个相关的知识,希望对你有一定的参考价值。

var sql2="select goodsname from allgoods where goodsid=(do while not rs.eof select goodsid from goodsorder where username=?)";
baseDAO.db.all(sql2,obj,function(err,rows)
ary.push(rows)
console.log(rows)
)
比如这句,where条件出来的goodsid可能有很多个,但是为什么console出来只有第一个,应该怎么做呢

参考技术A select * from student where sex='男' and age=20;

MySql多表查询

技术图片

一、笛卡尔积现象

  多表查询时,两张表的数据量发生错误,总数据为表1*表2的数据,显然不是我们想要的,这是笛卡尔积现象。

二、如何清除笛卡尔积现象

  多表查询的时候,通过条件过滤掉不需要的数据。条件:外键=主键。

三、内连接

什么是内连接

  多表查询时,只要满足条件的数据

隐式内连接

隐式内连接:看不到JOIN关键字,条件使用WHERE指定

SELECT * FROM 左表, 右表 WHERE 条件;

显式内连接

显式内连接:使用INNER JOIN ... ON语句, 可以省略INNER

    SELECT * FROM 左表 INNER JOIN 右表 ON 表连接条件 WHERE 查询条件;

四、外连接
  
  左外连接

    
将满足要求的数据显示,左表不满足要求的数据也显示(在内连接的基础上,保证左表的数据全部显示)
    
- 左外连接:使用`LEFT OUTER JOIN ... ON`,`OUTER`可以省略

```sql
SELECT * FROM 左表 LEFT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;

  右外连接  

    将满足要求的数据显示,右表不满足要求的数据也显示(在内连接的基础上,保证右表的数据全部显示)
右外连接:使用`RIGHT OUTER JOIN ... ON`,`OUTER`可以省略

```sql
SELECT * FROM 左表 RIGHT OUTER JOIN 右表 ON 表连接条件 WHERE 查询条件;
```

五、子查询

  什么是子查询

    将一个查询结果作为另一个查询语句的一部分。

  子查询的三种情况

  子查询的结果是单行单列的时候 技术图片

子查询结果是`单列`,在`WHERE`后面作为`条件`
`SELECT 查询字段 FROM 表 WHERE 字段=(子查询);`

子查询的结果是多行单列的时候技术图片

子查询结果是多行单列,结果集类似于一个数组,在`WHERE`后面作为`条件`,父查询使用`IN`运算符

```sql
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
```

子查询的结果是多行多列技术图片

子查询结果是`多列`,在`FROM`后面作为`表` 

```sql
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
```

子查询作为表需要取别名,否则这张表没用名称无法访问表中的字段
 

以上是关于sqlite3多表查询where出来的事多个值,为啥只执行第一个的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 多表where查询与单表select where in哪一个效率高

尝试在SQLite3中创建具有多个条件的SQL VIEW

Access select where 数据库查询 多表联合查询

Mysql 子查询

数据库多表查询之 where & INNER JOIN

多表连接查询中,“on”和“where”有啥区别吗?