我认为我的where子句是错误的。
我的困境是,如果用户在tbl_dentalBuyerInsurance中没有记录,那就意味着他们正在全力以赴。
因此,如果用户在tbl_dentalBuyerInsurance中没有记录,我希望他们回来作为结果。 如果他们在tbl_dentalBuyerInsurance中有记录并且匹配使用LIKE或相等,我也希望他们回来。
SELECT
[dbo].[tbl_users].*, [dbo].[tbl_dentalBuyerInsurance].*
FROM
[dbo].[tbl_users]
LEFT OUTER JOIN [dbo].[tbl_dentalBuyerInsurance] ON [dbo].[tbl_dentalBuyerInsurance].buyerId = [dbo].[tbl_users].id
LEFT OUTER JOIN [dbo].[tbl_dentalInsurance] ON [dbo].[tbl_dentalInsurance].id = [dbo].[tbl_dentalBuyerInsurance].dentalInsuranceId
WHERE
(
(
[dbo].[tbl_dentalInsurance].companyName LIKE '%Cigna%'
OR [dbo].[tbl_dentalInsurance].companyName = ''
)
AND(
[dbo].[tbl_dentalBuyerInsurance].ppo = 1
OR [dbo].[tbl_dentalBuyerInsurance].ppo = ''
)
AND(
[dbo].[tbl_dentalBuyerInsurance].hmo = 0
OR [dbo].[tbl_dentalBuyerInsurance].hmo = ''
)
)
答案 0 :(得分:3)
鉴于您正在使用LEFT JOINS,如果在连接的“右侧”没有匹配的记录,则所有这些右侧字段将为NULL
,而不是空字符串。你必须用.... OR whatever IS NULL
明确地检查它,因为NULL不能等于任何东西,包括它自己。
答案 1 :(得分:1)
[dbo].[tbl_dentalInsurance].companyName LIKE '%Cigna%'
OR [dbo].[tbl_dentalInsurance].companyName = ''
这意味着你是允许空字符串,这是你的第一个错误,以及如果你正在寻找空值所以如何查询MarcB所以查询是:
[dbo].[tbl_dentalInsurance].companyName LIKE '%Cigna%'
OR [dbo].[tbl_dentalInsurance].companyName is null
如果你允许空字符串,那么你必须使用len函数来验证带有lenght 0的值
saludos