select * from aa where id not in(select id from bb where bb.col=1) 重构这段SQL
时间: 2024-01-07 07:52:06 浏览: 18
可以使用左连接来重构这段 SQL,如下:
```
SELECT aa.* FROM aa
LEFT JOIN bb ON aa.id = bb.id AND bb.col = 1
WHERE bb.id IS NULL;
```
这个查询将左连接 aa 和 bb 表,并返回 aa 表中 id 不在 bb 表中 col = 1 的记录。在这个查询中,我们使用 WHERE 子句来排除左连接的结果中 bb.id 不为 NULL 的行,这些行对应于 bb 表中 col = 1 的记录。
相关问题
SELECT * from T1 where Exists select * from T2 where T1.id= T2.id
您的 SQL 查询语句存在语法错误,应该将 `select * from T2 where T1.id= T2.id` 用括号括起来,表示这是一个子查询,如下所示:
```
SELECT * FROM T1 WHERE EXISTS (SELECT * FROM T2 WHERE T1.id = T2.id);
```
这个查询语句的意思是,对于 T1 表中的每一行记录,都去 T2 表中查找是否存在与 T1 表中的记录具有相同 id 的记录。如果存在,则返回 T1 表中的这一行记录。
需要注意的是,这个查询语句的效率可能不太高,如果 T1 和 T2 表都非常大,可以考虑使用其他更高效的查询方式来实现相同的功能。
rs.source=select * from log where id="+chid+""为什么错误
这个错误可能是因为你的代码中没有定义 `rs` 这个变量。你需要先定义 `rs`,然后再执行 SQL 查询语句。
另外,建议你在执行 SQL 查询语句时,使用参数化查询,而不是直接将变量拼接到 SQL 查询语句中,以避免 SQL 注入攻击。例如:
```python
import mysql.connector
cnx = mysql.connector.connect(user='username', password='password',
host='127.0.0.1',
database='database_name')
cursor = cnx.cursor()
query = "SELECT * FROM log WHERE id = %s"
chid = 1
cursor.execute(query, (chid,))
for (id, log) in cursor:
print(id, log)
cursor.close()
cnx.close()
```
在上面的代码中,我们使用 `%s` 占位符来表示查询语句中的参数,然后在执行查询时,将参数传递给 `execute()` 方法。这样可以保证查询语句的安全性。