SELECT * FROM ky_groupchat kg WHERE kg.archive_id IN((SELECT kp.archive_id FROM ky_patient kp LEFT JOIN ky_user ku ON kp.user_id =ku.id WHERE kp.account_relationship NOT IN ("本人") AND kp.user_id IS NOT NULL AND ku.phone NOT IN (SELECT phone FROM ky_phone WHERE TYPE = '3') AND kp.id_number !="") )
时间: 2024-04-08 12:32:49 浏览: 11
您提供的是一个SQL查询语句,该查询语句的目的是从ky_groupchat表中选择符合条件的记录。其中使用了子查询和多个条件过滤。
根据查询语句,首先会从ky_patient表中获取满足以下条件的archive_id:
- account_relationship不为"本人"
- user_id不为空
- 对应的ky_user表中的phone不在ky_phone表中类型为3的记录中
- id_number不为空
然后,将上述查询结果作为archive_id的取值,从ky_groupchat表中选择对应的记录。
请注意,根据您提供的信息,我无法判断这个查询是否符合您的需求,因为我无法获取相关表格的结构和数据。如果您有任何具体的问题或需求,请进一步提供详细信息。
相关问题
select * from WXDA_GROUP_MESSAGE where id = '3385762713863199347' 把这条消息的前20条和后20条的sql写出来
前20条消息的SQL语句:
```
SELECT * FROM WXDA_GROUP_MESSAGE WHERE group_id = (SELECT group_id FROM WXDA_GROUP_MESSAGE WHERE id = '3385762713863199347') AND id < '3385762713863199347' ORDER BY id DESC LIMIT 20
```
后20条消息的SQL语句:
```
SELECT * FROM WXDA_GROUP_MESSAGE WHERE group_id = (SELECT group_id FROM WXDA_GROUP_MESSAGE WHERE id = '3385762713863199347') AND id > '3385762713863199347' ORDER BY id ASC LIMIT 20
```
这两条SQL语句分别查询了与指定消息在同一群聊中的前20条和后20条消息。其中,先通过指定消息的ID,查询出该消息所在的群聊ID,然后再根据该群聊ID和指定消息的ID,分别查询前20条和后20条消息。前20条消息按照ID降序排列,后20条消息按照ID升序排列。
oracle中,select * from WXDA_GROUP_MESSAGE where id = '3385762713863199347' 把这条消息的前20条和后20条的sql写出来
Oracle 中查询指定消息前20条和后20条消息可以使用如下语句:
前20条消息的 SQL 语句:
```
SELECT * FROM (
SELECT * FROM WXDA_GROUP_MESSAGE WHERE id < '3385762713863199347' ORDER BY id DESC
) WHERE ROWNUM <= 20;
```
后20条消息的 SQL 语句:
```
SELECT * FROM (
SELECT * FROM WXDA_GROUP_MESSAGE WHERE id > '3385762713863199347' ORDER BY id ASC
) WHERE ROWNUM <= 20;
```
其中,前20条消息的 SQL 语句使用了子查询和 ROWNUM 来限制结果集的数量,先按照 ID 降序排列,再取出前20条记录。后20条消息的 SQL 语句同样使用了子查询和 ROWNUM 来限制结果集的数量,先按照 ID 升序排列,再取出前20条记录。需要注意的是,Oracle 中 ROWNUM 是在结果集返回之后才进行排序和筛选的,因此需要在子查询中进行排序。