我有一个非常基本的LEFT OUTER JOIN来返回左表中的所有结果以及来自更大表的一些附加信息.左表包含4935条记录,但当我将其连接到另一个表时,记录计数明显更大.
据我所知,LEFT OUTER JOIN将返回左表中的所有记录,右表中的匹配记录和任何无法匹配的行的空值,这是绝对的福音,因此我的理解是它应该不可能返回比左表中存在的行更多的行,但它发生的一切都是一样的!
SQL查询如下:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM SUSP.Susp_Visits LEFT OUTER JOIN
DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Run Code Online (Sandbox Code Playgroud)
也许我在语法上犯了一个错误,或者我对LEFT OUTER JOIN的理解是不完整的,希望有人可以解释这是如何发生的?
后记
感谢你们给出了很好的答案,我对LEFT OUTER JOINS的理解现在要好得多,但是有人可以提出一种方法可以修改这个查询,这样我只能获得与左表中存在的记录一样多的记录吗?
此查询纯粹是为了生成报告,而重复的匹配只是简单地混淆了问题.
/后记
我正在使用我的代码隐藏页面以编程方式创建一个保存按钮:
Button btnSave = new Button();
btnSave.ID = "btnSave";
btnSave.Text = "Save";
Run Code Online (Sandbox Code Playgroud)
但是我认为这必须创建一个html按钮或者可能需要其他东西,因为我似乎无法在下一行中设置OnClick属性,我可以指定OnClientClick,但这不是我想要设置的那个.
我有一个查询返回给定员工的工资成本
SELECT totalhours * staffbaserate AS TotalCost
FROM newrotaRaw
WHERE staffref = @staffref
Run Code Online (Sandbox Code Playgroud)
但是如果返回值> 105,我需要做一些额外的数学运算.我需要做的数学运算是,如果值<105,则返回原值,但是如果值大于105,那么我需要做值*1.128.
例如:
约翰史密斯的成本是90,因此查询应该返回90
David Smith的成本为140因此查询应返回157.92
我确定有一些方法可以使用replace来让它做我想要的但是我只使用了替换完全匹配,在这种情况下,替换是以值为条件的.
任何帮助将非常感激!