You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询表X中列值被另一表A列值包含的所有行?

解决表X中列Y值被表A列B包含的行查询问题

我来帮你修正这个SQL查询的问题,你要实现的是找出表X中列Y的值能在表A的任意列B值里找到的行对吧?先看看你原来的错误写法问题出在哪:

select (select Y where Y in like concat('%', select B from A, '%'))

这个语句有几个明显的语法和逻辑错误:

  • IN 和 LIKE 不能结合使用,属于语法错误
  • 子查询缺少必要的FROM子句,结构不完整
  • 逻辑搞反了:你需要检查的是表A的B列值是否包含表X的Y列值,而不是反过来,而且concat里嵌套多行子查询也会直接报错

正确的查询写法

方法1:使用EXISTS子查询(推荐,性能更优)

这种方式会逐行检查X中的每个Y值,是否存在A中的某条B值包含它,是最直观且高效的写法:

SELECT X.Y
FROM X
WHERE EXISTS (
    SELECT 1
    FROM A
    WHERE A.B LIKE CONCAT('%', X.Y, '%')
);

方法2:使用JOIN关联查询

如果你习惯用JOIN的方式,也可以这样写,注意要加DISTINCT避免重复结果(因为同一个Y可能被多个B值包含):

SELECT DISTINCT X.Y
FROM X
JOIN A ON A.B LIKE CONCAT('%', X.Y, '%');

处理大小写匹配问题

如果你的数据库是区分大小写的(比如PostgreSQL默认区分大小写),可以统一转成小写(或大写)来确保匹配准确:

SELECT X.Y
FROM X
WHERE EXISTS (
    SELECT 1
    FROM A
    WHERE LOWER(A.B) LIKE CONCAT('%', LOWER(X.Y), '%')
);

这样运行后,就会返回你需要的"Hi"、"Blue"、"Red",而"great"因为没有被任何B值包含,不会被返回。

内容的提问来源于stack exchange,提问作者user3879250

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:53:46