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

咨询四列数据表两类场景的最优SQL查询语句

嘿,我来帮你搞定这两个SQL查询需求,针对你的四列表格,咱们一步步拆解:

1. 查询所有四列均为'Listed'的行

这个需求逻辑很直接,就是要筛选出每一列的值都是'Listed'的行,用AND把四个列的匹配条件连起来就行:

SELECT * FROM your_table
WHERE Column1 = 'Listed' 
  AND Column2 = 'Listed' 
  AND Column3 = 'Listed' 
  AND Column4 = 'Listed';

记得把your_table替换成你实际的表名哦。

2. 查询部分列为价格、部分列为'Listed'的行

这里的核心是至少有一列是价格格式,同时至少有一列是'Listed',不能全是价格也不能全是'Listed'。我们可以用两种思路来实现:

思路一:直接匹配法(明确满足“有Listed也有价格”)

先判断至少有一列是'Listed',再判断至少有一列符合价格格式(比如($3.99)这种):

SELECT * FROM your_table
WHERE 
  -- 至少有一列是Listed
  (Column1 = 'Listed' OR Column2 = 'Listed' OR Column3 = 'Listed' OR Column4 = 'Listed')
  AND
  -- 至少有一列是价格格式(这里用正则匹配,不同数据库语法可能略有差异)
  (Column1 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$' 
   OR Column2 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
   OR Column3 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
   OR Column4 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$');

思路二:排除法(去掉全Listed和全价格的行)

先排除掉第一个查询里全是'Listed'的行,再排除掉所有列都是价格的行,剩下的就是符合要求的:

SELECT * FROM your_table
WHERE 
  -- 排除全Listed的行
  NOT (Column1 = 'Listed' AND Column2 = 'Listed' AND Column3 = 'Listed' AND Column4 = 'Listed')
  AND
  -- 排除全价格的行
  NOT (
    Column1 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
    AND Column2 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
    AND Column3 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
    AND Column4 REGEXP '^\\(\\$[0-9]+\\.[0-9]{2}\\)$'
  );

关于价格格式的匹配说明

上面用的正则是针对($X.XX)这种格式的,不同数据库的正则语法可能有小差异:

  • MySQL/MariaDB:用REGEXP或RLIKE
  • PostgreSQL:用~运算符,比如Column1 ~ '^\(\$[0-9]+\.[0-9]{2}\)$'
  • SQL Server:可以用PATINDEX,比如PATINDEX('^($[0-9]+\.[0-9]{2})$', Column1) > 0

你可以根据自己使用的数据库调整这部分语法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:58