尝试从一个表中检查另一个表中的数据

时间:2019-12-19 02:46:57

标签: sql sql-server

我对SQL非常陌生,并且以某种方式找到了需要我进行SQL的工作(不要躺在简历中)。无论如何,我正在尝试执行SELECT语句,我想在tableA中选择一个columnA,其中ColumnA中的单词存在于另一个tableB中,下面是我要实现的示例。

TableA, ColumnA : {Apple, Ball, Chair, Doll, Egg, Fan, Gun, Hat, Ink, Jug}
TableB, ColumnB : {Chair, Ball, Egg, Ink}

所以我试图提出我想要的声明,如下所示:

SELECT ColumnA FROM TableA
WHERE ColumnA = (SELECT ColumnB FROM TableB)

OR

SELECT ColumnA FROM TableA
WHERE ColumnA LIKE '%' + (SELECT ColumnB FROM TableB) + '%'

当然它不起作用,因为它将返回多个值。我在这方面还是一个新手,无法弄清楚如何使用CURSOR等功能。非常感谢您的帮助。谢谢。

(EDIT):因此从答案来看,同时使用IN和JOIN都可以解决我所需要的。非常感谢你。但是,我也想知道我需要使用LIKE的情况,假设columnA和columnB具有

ColumnA : {'This apple is red', 'This ball is round', 'This chair is metal'}
ColumnB : {'red', 'round'}

因此,我想显示columnA中具有columnB中存在的关键字的数据。我在想唯一的方法是组合通配符并从columnB中选择。非常感谢您的帮助,谢谢。

3 个答案:

答案 0 :(得分:2)

sql server 2016 及更高版本,您可以在这种情况下使用string_split函数。

select * from tableA t1
cross apply string_split(t1.ColumnA, ',') t2
where t2.Value in 
(select t2.value from tableB t1
cross apply string_split(t1.ColumnB, ',') t2)

请参见dbfiddle

对于 sql server 2014 ,我们需要使用具有string函数的递归查询。

with cte as
(
    select
        left(ColumnA, charindex(',', ColumnA + ',') - 1) as col1 ,
        stuff(ColumnA, 1, charindex(',', ColumnA + ','), '') as col2
    from tableA
    union all
    select
        left(col2, charindex(',', col2 + ',') - 1),
        stuff(col2, 1, charindex(',', col2 + ','), '')
    from cte
    where
        col2 !=  ''
), cte2 as 
(
    select
        left(ColumnB, charindex(',', ColumnB + ',') - 1) as col1 ,
        stuff(ColumnB, 1, charindex(',', ColumnB + ','), '') as col2
    from tableB
    union all
    select
        left(col2, charindex(',', col2 + ',') - 1),
        stuff(col2, 1, charindex(',', col2 + ','), '')
    from cte2
    where
        col2 !=  ''

)
select * from cte where rtrim(ltrim(col1)) in (select rtrim(ltrim(col1)) from cte2)
option (maxrecursion 0);

请参见dbfiddle

答案 1 :(得分:1)

.js

或(最好做)

SELECT ColumnA FROM TableA
WHERE ColumnA IN (SELECT ColumnB FROM TableB)

答案 2 :(得分:1)

尝试一下

metrics=["accuracy"]