38 mysql sql t-sql sql-server oracle
我知道连接的用法,但有时当我无法确定哪个连接适合左边或右边时,我会遇到这种情况.
这是我被困的查询.
SELECT count(ImageId) as [IndividualRemaining],
userMaster.empName AS ID#,
CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
batchDetails.batchName AS Batch#,
Client=@ClientName,
TotalInloaded = IsNull(@TotalInloaded,0),
PendingUnassigned = @PendingUnassigned,
InloadedAssigned = IsNull(@TotalAssigned,0),
TotalProcessed = @TotalProcessed,
Remaining = @Remaining
FROM
batchDetails
Left JOIN folderDetails ON batchDetails.folderId = folderDetails.folderId
Left JOIN imageDetails ON batchDetails.batchId = imageDetails.batchId
Left JOIN userMaster ON imageDetails.assignedToUser = userMaster.userId
WHERE folderDetails.ClientId =@ClientID and verifyflag='n'
and folderDetails.FolderName IN (SELECT convert(VARCHAR,Value) FROM dbo.Split(@Output,','))
and userMaster.empName <> 'unused'
GROUP BY userMaster.empName, folderDetails.folderName, batchDetails.batchName
Order BY folderDetails.Foldername asc
Run Code Online (Sandbox Code Playgroud)
Pra*_*ana 109
是的,这取决于你所处的情况.
为什么要使用SQL JOIN?
答案:每当必须通过SQL SELECT语句访问多个表时,请使用SQL JOIN,如果JOINed表之间没有匹配项,则不应返回任何结果.
阅读有关代码项目的原始文章将对您有所帮助:SQL连接的可视化表示.
另请查看这篇文章:SQL SERVER - 更好的性能 - LEFT JOIN还是NOT IN?.
找到原始的:MySQL中的JOIN和OUTER JOIN之间的区别.
Kni*_*ins 13
两套:
如果需要两个集合的所有结果,请使用完全外部联接.
如果只需要两个集合中显示的结果,请使用内部联接.
如果希望所有结果都设置为a,则使用左外连接,但如果设置b具有与某些set a记录相关的数据,那么您也希望在同一查询中使用该数据.
请参考下图:
我认为你要找的是LEFT JOIN
从主表开始,从主表中返回所有记录,无论它们在连接的表中是否有有效数据(如图中左上角2所示)
JOIN是连续发生的,所以如果你有4个表加入,并且你总是想要主表中的所有记录,你需要在LEFT JOIN
整个过程中继续,例如:
SELECT * FROM main_table
LEFT JOIN sub_table ON main_table.ID = sub_table.main_table_ID
LEFT JOIN sub_sub_table on main_table.ID = sub_sub_table.main_table_ID
Run Code Online (Sandbox Code Playgroud)
如果你INNER JOIN
是sub_sub_table,它会立即缩小你的结果集,即使你在sub_table LEFT JOIN
上做了一个.
请记住,在执行操作时LEFT JOIN
,您需要考虑NULL
返回的值.因为如果没有记录可以与main_table连接,则LEFT JOIN
强制该字段出现,并且将包含NULL.INNER JOIN
显然只是"扔掉"行而不是因为两者之间没有有效的链接(根据您加入的ID没有相应的记录)
但是,你提到你有一个where语句来过滤你正在寻找的行,所以你对JOIN的问题是无效的,因为这不是你真正的问题.(这是我理解你的评论的正确方法)
归档时间: |
|
查看次数: |
70248 次 |
最近记录: |