【问题标题】:Select multiples values in multiples columns在多个列中选择多个值
【发布时间】:2018-05-15 06:55:44
【问题描述】:

我正在用 Java 开发一个小型仓库管理软件,但在尝试搜索 3 列中的一些值时遇到了问题。

表格是这样的:

产品

  • 身份证
  • 代码
  • 原始码
  • 姓名首字母
  • 说明
  • 家庭
  • 仓库库存

我需要搜索一个由空格分隔的字符串。例如。

搜索字符串:“镜像 120 5269”

其中“5269”是代码的一部分,“miror 120”是描述的一部分。

我试过这个和全文索引

SELECT * FROM PRODUCTS
WHERE (PRODUCTS.code OR PRODUCTS.description OR PRODUCTS.family)
LIKE '%mirror 120 5269%'

【问题讨论】:

  • WHERE CONCAT(A, B, C) LIKE '% query %''。请注意,这不会很快。如果您希望它具有远程性能,则需要另一列将这些值放在一起 - 即使那样它也不会特别高效。如果你需要加入太空,那么CONCAT_WS(' ', A, B, C)
  • 在java中拆分字符串

标签: java mysql search


【解决方案1】:

你可以如下使用CONCAT操作符

SELECT *  FROM PRODUCTS
WHERE CONCAT(code, ' ',description) LIKE %your-string%

这将为您提供在代码列空间描述列中具有相同字符串的所有行

【讨论】:

  • 当我将 Sting 排序(代码,描述家族)时,这工作正常,但如果我将顺序更改为例如(家族,描述,代码) SELECT * FROM PRODUCTS p WHERE CONCAT(p.code, ' ',p.description, ' ', p.family) LIKE '%5269%mirror%NW%'
【解决方案2】:

使用 CONCAT 函数合并你要搜索的字符串

我没有测试它,但它可能是这样的:

"SELECT * FROM PRODUCTS WHERE CONCAT(PRODUCTS.code + ' ' + PRODUCTS.description) LIKE '%mirror 120 5269%'"

【讨论】:

  • 当我将 Sting 排序(代码,描述家族)时,这工作正常,但如果我将顺序更改为例如(家族,描述,代码) SELECT * FROM PRODUCTS p WHERE CONCAT(p.code, ' ',p.description, ' ', p.family) LIKE '%5269%mirror%NW%'
  • @freaker 那是因为 like 函数按代码 + ' ' + 描述的顺序排列...您也可以使用“SELECT * FROM PRODUCTS WHERE PRODUCTS.code LIKE '%-String 来搜索它-%' OR PRODUCTS.description LIKE '%-String-%'“ 这样它就会搜索两列之间的任何匹配项,但您不能完成搜索...使用此查询,您只能搜索描述仅或仅代码...
  • CONCAT(PRODUCTS.code + ' ' + PRODUCTS.description) 语法无效。
猜你喜欢
  • 2018-06-18
  • 2015-07-21
  • 1970-01-01
  • 2014-10-04
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多