sql - 使用通配符连接不匹配字符串

标签 sql sql-server join wildcard

背景

我有两个表:

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

问题

我尝试将药品与其价格相匹配的查询如下所示。我正在尝试匹配 drugNamedrugBrandName(即: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/

相关文章:

mysql - 如何使用 N :M relationship in MySQL? 创建表

java - Jboss后台验证

sql-server - SQL加入带有参数的递归CTE

MySQL 如何让这个子查询正确运行?

c# - 从暂存到仓库执行 ETL 的最佳策略

mysql - MySQL中的时间戳除法

sql - 取某列的平均值,然后过滤掉所有小于平均值的行,然后统计行数

c# - 当 ID 自动递增时,如何在 Visual Studio 中将其他值插入数据库

mysql - 从一个表获取值到另一个表

sql - 我可以在连接中引用后面的表吗?