【问题标题】:Selecting Rows based on multiple values in column根据列中的多个值选择行
【发布时间】:2018-05-17 16:42:27
【问题描述】:

我有两个表(T1,T2)。下面是这两个表的示例记录。

T1
 --
    RNO    NAME
    ---   ------ 
    1      NAME1
    2      Name3
    3      Name4

    T2
    ---
    RNO    NAMES
    ---    -----
    1      NAME1,Name5
    2      Name4
    3      Name2

我想根据 T2 表中的“名称”列从 T2 中选择记录,该列包含 T1 表中“名称”列的任何一个值。

FOR 示例

Sample Output

RNO   Names
---   -----
1     Name1,Name5
2     Name4

'Name2' 不应出现在输出中,因为它在 T1 表中不存在。请帮助。

【问题讨论】:

  • 你的桌子设计很糟糕。存储分隔是没有胜利的情况,因为它违反了 1NF。不要对自己这样做。如果你修复你的架构,查询就会变得简单。

标签: sql-server select


【解决方案1】:

你可以使用EXISTS

select t1.* 
from t1 
where exists (select 1 
              from t2 
              where t1.NAME like '%' + t2.NAMES + '%');

【讨论】:

  • 从 T2 中选择记录。所以我们必须更改该查询?
  • select t2.* from table t2 where exists (select 1 from table t1 where t1.NAME like '%' + t2.NAMES + '%');
  • @Ram。 . .是的,您需要更改表名。
【解决方案2】:

这有用吗?

SELECT * FROM T2
Inner join T1
 ON (
       (t2.Name=t1.Name)
          OR
       (t2.Name LIKE'%'+t1.Name+',%')
          OR
       (t2.Name LIKE'%,'+t1.Name+'%')
          OR
       (t2.Name LIKE'%,'+t1.Name+',%')
   )

小提琴:http://sqlfiddle.com/#!18/b4641/1

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多