[英]Merge two queries sql into one mapping to POCO
我有兩個SQL查詢如下
SELECT ADGroupName, ADGroupDescription, ADGroupEmail
FROM ADGroup
WHERE ADGroupName = 'XXXX'
這將向我返回有關特定組的信息的單個結果。
SELECT ADUser.ADUserFirstName as FirstName, ADUser.ADUserLastName as
LastName
FROM ADUser WHERE ADUser.ADUserName
IN(SELECT ADUser_ADGroup.ADUGUserName
FROM ADUser_ADGroup
WHERE ADUser_ADGroup.ADUGGroupName = 'XXXX_Manager')
這將返回我在上述查詢中獲得有關信息的組的經理列表。 是否可以將兩個查詢合並為一個sql查詢?
整個代碼如下
public AdGroupDto GetGroupByGroupName(string groupName)
{
var sql = "SELECT ADGroupName, ADGroupDescription, ADGroupEmail " +
"FROM ADGroup " +
"WHERE ADGroupName = @0";
var result = _db.Single<AdGroupDto>(sql, groupName);
var sqlForTeacher = "SELECT ADUser.ADUserFirstName as FirstName, ADUser.ADUserLastName as LastName " +
"FROM ADUser WHERE ADUser.ADUserName " +
"IN(SELECT ADUser_ADGroup.ADUGUserName " +
"FROM ADUser_ADGroup " +
"WHERE ADUser_ADGroup.ADUGGroupName = @0)";
var data = _db.Query<UserInfoDto>(sqlForTeacher, groupName + "_Manager").ToList();
result.Teachers = data;
return result;
}
Silke-克魯斯-ZZA-KL-1A-ZZA-KL-1A類的學生
Sille-達爾-ZZA-KL-1A-ZZA-KL-1A類的學生
如果我的表結構正確,並且假設您在每個表中都有外鍵,那么類似的方法應該可以解決您的問題:
SELECT ADUser.ADUserFirstName AS FirstName, ADUser.ADUserLastName AS LastName, ADGroupName, ADGroupDescription, ADGroupEmail
FROM ADUser
INNER JOIN ADUser_ADGroup ON ADUser.<id> = ADUser_ADGroup.<user_id>
INNER JOIN ADGroup ON ADGroup.<id> = ADUser_ADGroup.<group_id>
WHERE ADGroup.ADGroupName = 'XXXX' AND ADUser_ADGroup.ADUGGroupName LIKE '%Manager%'
只要確保對JOIN
子句使用特定的列名即可。
UPD:這是MySQL / MariaDB的代碼。
試試這個:
SELECT U.ADUserFirstName as FirstName, U.ADUserLastName as LastName, G.ADGroupName, G.ADGroupDescription, G.ADGroupEmail,
FROM ADUser U
INNER JOIN ADUser_ADGroup UG ON U.ADUserName = UG.ADUGUserName
INNER JOIN ADGroup G ON UG.ADUGGroupName = G.ADGroupName + '_Manager'
WHERE G.ADGroupName = 'XXXX'
這將與比較組名ADUser_ADGroup
與附加_Manager
以上查詢是針對SQL Server的。
如果您使用的是Oracle:
SELECT U.ADUserFirstName as FirstName, U.ADUserLastName as LastName, G.ADGroupName, G.ADGroupDescription, G.ADGroupEmail,
FROM ADUser U
INNER JOIN ADUser_ADGroup UG ON U.ADUserName = UG.ADUGUserName
INNER JOIN ADGroup G ON UG.ADUGGroupName = G.ADGroupName || '_Manager'
WHERE G.ADGroupName = 'XXXX'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.