首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Join查询在SQL查询中进行过滤

问使用Join查询在SQL查询中进行过滤
EN

Stack Overflow用户
提问于 2011-06-03 04:29:09
回答 4查看 125关注 0票数 0

我有一个复杂的SQL查询,其中编写了许多连接和条件。

ComplexQuery的列很少,最著名的列名是WeightCode和DrugName。

假设:Select * from ComplexQuery。

我还有第二个表:Select DrugName from Table2。

我的要求是这样的,

如果WeightCode = 2,则应删除来自ComplexQuery的DrugName的前五个字母与表2中DrugName的前五个字母相匹配。

我对接近..感到迷惑!如何定义带有筛选条件的单连接查询??

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-03 04:32:00

使用Case..When可能会解决您的问题

示例

代码语言:javascript
复制
SELECT column1, column2
FROM TABLE
WHERE
column1 = 
  CASE @locationType
      WHEN 'val1' THEN column1
      WHEN 'val2' THEN column1 
  END

注意:这只是一个例子

票数 2
EN

Stack Overflow用户

发布于 2011-06-03 04:33:27

您还可以对NOT IN或EXISTS使用子选择。

列出要在子查询中排除的内容,并使用连接条件将其与外部查询关联起来。

也就是说。

代码语言:javascript
复制
WHERE MainTableKey NOT IN (SELECT ForeignKey from MyTable2
                           WHERE DoNotInclude = 1)

编辑:

替代解决方案,使用EXCEPT

伪码为:

代码语言:javascript
复制
SELECT col1, col2, col3
FROM ComplexQuery
EXCEPT
SELECT Col1, Col2, Col3
FROM MyTable t1
INNER JOIN Table2 t2
   ON LEFT(t1.Drugname, 5) = LEFT(t2.drugname, 5)
   AND t1.WeightCode = 2

Except从第一个结果集中删除第二个结果集。唯一的问题是需要在两个集合中返回相同的字段,就像在UNION中一样。

票数 0
EN

Stack Overflow用户

发布于 2011-06-03 04:40:40

因此,如果ComplexQuery.WeightCode = 2,并且如果WeightCode.DrugName的前五个字母可以与Table2.DrugName中任何记录的前五个字母匹配,那么您想从ComplexQuery.WeightCode中删除前五个字母吗?

如果是这样的话,试试这个:

代码语言:javascript
复制
SELECT cq.*, 
    CASE cq.WeightCode WHEN 2 THEN RIGHT(cq.DrugName, LEN(cq.DrugName)-5) ELSE cq.DrugName END DrugName
FROM ComplexQuery cq
    LEFT OUTER JOIN Table2 t 
        ON cq.WeightCode = 2 AND LEFT(cq.DrugName, 5) = LEFT(t2.DrugName, 5)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6220012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档