背景
我有两个表:
drugDistributionHistory
- 详细说明向患者分发药物的内容/时间。
drugPrices
- 药品价格。
在此示例中,我正在研究名为“FLUOXETINE”的药物,也称为“PROZAC”。
如果我在 drugPrices
表中查询该药物,我会得到以下结果:
SELECT
drugName,
drugBrandName,
drugStrength,
drugDosage,
drugPrice
FROM
drugPrices
WHERE
drugName like '%fluoxetine%'
结果:
FLUOXETINE PROZAC 10MG CAP 0.02
FLUOXETINE PROZAC 20MG CAP 0.05
在我的 drugDistributionHistory
表中,我正在寻找相同类型的药物,但是,输入的药物可能会有所不同,例如:
select
drugName,
strength,
measurement
from
drugDistributionHistory ddh
INNER JOIN facilities f ON ddh.facilityId = f.facilityId
where
f.facilityId = 40
AND ddh.resultCode = 'Received'
AND MONTH(dateGiven) = '01'
AND YEAR(dateGiven) = '2014'
and ddh.drugName like 'fluoxetine%'
排序依据 ddh.药物名称
结果:
Fluoxetine / Prozac 60.00 mg
Fluoxetine / Prozac 20.00 mg
问题
我尝试将药品与其价格相匹配的查询如下所示。我正在尝试匹配 drugName
或 drugBrandName
(即:PROZAC 是 FLUOXETINE 的品牌药物):
select
drugName,
strength,
measurement
from
drugDistributionHistory ddh
INNER JOIN facilities f ON ddh.facilityId = f.facilityId
INNER JOIN drugPrices dp ON
('%' + dp.drugName + '%' like '%' + ddh.drugName + '%'
OR '%' + dp.drugBrandName + '%' like '%' + ddh.drugName + '%')
where
f.facilityId = 40
AND ddh.resultCode = 'Received'
AND MONTH(dateGiven) = '01'
AND YEAR(dateGiven) = '2014'
and ddh.drugName like 'fluoxetine%'
order by
ddh.drugName
未找到任何结果。
我是否误解了连接表时如何使用通配符?
最佳答案
我认为
INNER JOIN drugPrices dp ON
('%' + dp.drugName + '%' like '%' + ddh.drugName + '%'
OR '%' + dp.drugBrandName + '%' like '%' + ddh.drugName + '%')
应该是
INNER JOIN drugPrices dp ON
(dp.drugName like '%' + ddh.drugName + '%'
OR dp.drugBrandName like '%' + ddh.drugName + '%')
请注意源字段中 % 符号的删除。您只能在 LIKE 运算符的右侧使用它们。
当然,这只会找到 dp.drugName 包含 ddh.drugName 或 dp.drugBrandName 包含 ddh.DrugName 的结果。这可以接受吗?
关于sql - 使用通配符连接不匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860839/