数据库联合查找

本文通过一系列SQL查询语句展示了如何从复杂的数据表中筛选特定条件下的记录,包括去除重复记录、按时间排序等操作,对于理解数据库查询优化及提高查询效率具有较高的参考价值。


-- SELECT * FROM t_videoTalkRecord;


-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id) 
--  FROM  t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND 
-- currentLoginUserId = '9999' AND recordType = 3 ORDER BY currentRecordSaveTimeStamp DESC;




-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3 ORDER BY currentRecordSaveTimeStamp DESC;


-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3;


-- SELECT * FROM t_videoTalkRecord WHERE userId IN(SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3);


-- SELECT  max(id)  FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' GROUP BY userId  HAVING count(*) >= 1
-- 
-- SELECT  *  FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 2 GROUP BY userId  HAVING count(*) >= 1




-- SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 2 GROUP BY userId  HAVING count(*) >= 1


-- //查找去过重的未接记录
-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 2 GROUP BY userId  HAVING count(*) >= 1) AND 
-- currentLoginUserId = '9999' AND recordType = 2 ORDER BY currentRecordSaveTimeStamp DESC;


-- //好友关系去除重复
-- SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 3 GROUP BY userId  HAVING count(*) >= 1
-- 
-- //查找好友去除重复 - 好友userid
-- SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 3 GROUP BY userId  HAVING count(*) >= 1) AND 
-- currentLoginUserId = '9999' AND recordType = 3;


-- //查找未接记录已经去重未接重复记录 并且 去除 非好友未接记录
-- SELECT * FROM (SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 2 GROUP BY userId  HAVING count(*) >= 1) AND 
-- currentLoginUserId = '9999' AND recordType = 2) WHERE userId IN(SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
-- t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 3 GROUP BY userId  HAVING count(*) >= 1) AND 
-- currentLoginUserId = '9999' AND recordType = 3);


-- //查找好友已经去重好友重复记录
SELECT * FROM (SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 3 GROUP BY userId  HAVING count(*) >= 1) AND 
currentLoginUserId = '9999' AND recordType = 3) WHERE userId IN(SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT max(id) FROM  
t_videoTalkRecord  WHERE currentLoginUserId = '9999' AND recordType = 3 GROUP BY userId  HAVING count(*) >= 1) AND 
currentLoginUserId = '9999' AND recordType = 3) ORDER BY currentRecordSaveTimeStamp DESC;




-- SELECT * FROM t_videoTalkRecord WHERE id IN () AND 
-- currentLoginUserId = '9999' AND recordType = 2 ORDER BY currentRecordSaveTimeStamp DESC;






-- SELECT * FROM t_videoTalkRecord WHERE currentLoginUserId = '9999' AND recordType = 2;


-- SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 2;


-- SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1


-- SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3


-- SELECT * FROM t_videoTalkRecord WHERE userId IN (SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3);


-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- (SELECT * FROM t_videoTalkRecord WHERE userId IN (SELECT userId FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 2))  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3 ORDER BY currentRecordSaveTimeStamp DESC;




-- SELECT * FROM t_videoTalkRecord WHERE userId IN(SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3 ORDER BY currentRecordSaveTimeStamp DESC);


-- SELECT * FROM t_videoTalkRecord WHERE userId IN (SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1));


-- SELECT * FROM t_videoTalkRecord WHERE id IN (SELECT  max(id)  FROM  
-- t_videoTalkRecord  GROUP BY userId  HAVING count(*) >= 1) AND currentLoginUserId = '9999' 
-- AND recordType = 3

Matlab基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率内容概要:本文围绕Matlab在电力系统优化控制领域的应用展开,重点介绍了基于粒子群优化算法(PSO)和鲁棒MPPT控制器提升光伏并网效率的技术方案。通过Matlab代码实现,结合智能优化算法先进控制策略,对光伏发电系统的最大功率点跟踪进行优化,有效提高了系统在不同光照条件下的能量转换效率和并网稳定性。同时,文档还涵盖了多种电力系统应用场景,如微电网调度、储能配置、鲁棒控制等,展示了Matlab在科研复现工程仿真中的强大能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事新能源系统开发的工程师;尤其适合关注光伏并网技术、智能优化算法应用MPPT控制策略研究的专业人士。; 使用场景及目标:①利用粒子群算法优化光伏系统MPPT控制器参数,提升动态响应速度稳态精度;②研究鲁棒控制策略在光伏并网系统中的抗干扰能力;③复现已发表的高水平论文(如EI、SCI)中的仿真案例,支撑科研项目学术写作。; 阅读建议:建议结合文中提供的Matlab代码Simulink模型进行实践操作,重点关注算法实现细节系统参数设置,同时参考链接中的完整资源下载以获取更多复现实例,加深对优化算法控制系统设计的理解。
### 多表联合查询方法及示例 在 SQL Server 中,多表联合查询是通过 `JOIN` 操作实现的,主要包括内连接(`INNER JOIN`)、左外连接(`LEFT OUTER JOIN`)和右外连接(`RIGHT OUTER JOIN`)。这些操作允许从多个表中提取数据,并根据指定的连接条件组合结果集。 #### 内连接查询 内连接用于返回两个表中满足连接条件的行。连接条件通常基于主外键关系,查询结果仅包含匹配的记录。语法如下: ```sql SELECT column_list FROM table1 INNER JOIN table2 ON table1.column = table2.column; ``` 例如,假设存在 `Author` 和 `Account` 两个表,分别存储作者信息和账号信息,通过 `AuthorId` 字段进行关联,查询语句如下: ```sql SELECT Author.AuthorId, AuthorName, AccountName FROM Author INNER JOIN Account ON Account.AuthorId = Author.AuthorId; ``` 此查询返回的结果集包含所有在 `Author` 和 `Account` 表中 `AuthorId` 字段匹配的记录,显示作者编号、作者名称和账号名称三列信息。 #### 左外连接查询 左外连接用于返回左表中所有记录,即使右表中没有匹配的行。如果右表中没有匹配,则结果集中右表的列显示为 `NULL`。语法如下: ```sql SELECT column_list FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column; ``` 例如,查询所有作者信息及其对应的账号信息(即使某些作者没有账号),可以使用以下语句: ```sql SELECT Author.AuthorId, AuthorName, AccountName FROM Author LEFT OUTER JOIN Account ON Account.AuthorId = Author.AuthorId; ``` 此查询返回的结果集包含 `Author` 表中的所有记录,以及 `Account` 表中 `AuthorId` 匹配的记录。对于 `Account` 表中没有匹配的 `AuthorId`,`AccountName` 列显示为 `NULL`。 #### 右外连接查询 右外连接左外连接类似,但返回的是右表中的所有记录,即使左表中没有匹配的行。如果左表中没有匹配,则结果集中左表的列显示为 `NULL`。语法如下: ```sql SELECT column_list FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column; ``` 例如,查询所有账号信息及其对应的作者信息(即使某些账号没有关联作者),可以使用以下语句: ```sql SELECT Author.AuthorId, AuthorName, AccountName FROM Author RIGHT OUTER JOIN Account ON Account.AuthorId = Author.AuthorId; ``` 此查询返回的结果集包含 `Account` 表中的所有记录,以及 `Author` 表中 `AuthorId` 匹配的记录。对于 `Author` 表中没有匹配的 `AuthorId`,`AuthorName` 和 `AuthorId` 列显示为 `NULL`。 #### 多表联合查询注意事项 - **连接表的选择**:需要明确要连接的表,确保连接的表之间存在关联关系(如主外键)。 - **连接条件**:必须明确两个表的连接条件,以确保查询结果的准确性。 - **字段来源**:对于两个表中相同的字段,需要明确说明该字段来自哪个表(通过 `表名.` 前缀)。 - **多表连接**:三表及三表以上的多表连接查询只需使用 `INNER JOIN` 或 `LEFT/RIGHT OUTER JOIN` 将多个表按连接条件连接起来即可。 #### 示例:多表联合查询 假设有 `StProjec`(项目表)、`STPatent`(专利表)、`STThesis`(论文表)和 `STOther`(其他成果表),需要查询每个项目的专利、论文及其他成果信息。可以使用以下查询语句: ```sql WITH Patent AS ( SELECT ROW_NUMBER() OVER(PARTITION BY StProjecZtbId ORDER BY StProjecZtbId) AS rowNumber, StProjecZtbId, PatentName FROM STPatent ), Thesis AS ( SELECT ROW_NUMBER() OVER(PARTITION BY StProjecZtbId ORDER BY StProjecZtbId) AS rowNumber, StProjecZtbId, ThesisName FROM STThesis ), Other AS ( SELECT ROW_NUMBER() OVER(PARTITION BY StProjecZtbId ORDER BY StProjecZtbId) AS rowNumber, StProjecZtbId, [Name] FROM STOther ) SELECT st.Id, st.StProjectName, T.PatentName, T.ThesisName, T.[Name] FROM StProjec st LEFT JOIN ( SELECT ISNULL(Patent.StProjecZtbId, ISNULL(Thesis.StProjecZtbId, Other.StProjecZtbId)) AS StProjecZtbId, PatentName, ThesisName, Other.[Name] FROM Patent FULL JOIN Thesis ON Patent.rowNumber = Thesis.rowNumber AND Patent.StProjecZtbId = Thesis.StProjecZtbId FULL JOIN Other ON Patent.rowNumber = Other.rowNumber AND Patent.StProjecZtbId = Other.StProjecZtbId ) T ON st.Id = T.StProjecZtbId WHERE 1 = 1 ORDER BY StProjecZtbId; ``` 该查询使用了 `WITH` 子句创建临时表,分别对专利、论文和其他成果进行编号,然后通过 `FULL JOIN` 将这些临时表按编号和项目编号进行连接,最终主表 `StProjec` 进行左连接,实现多表联合查询。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值