包含在没有LIKE的MySQL中

时间:2017-10-10 11:30:33

标签: mysql

我有两张桌子:

  • 表1 - Val 1(例如:TOP
  • 表2 - Val 2(示例:TOP,TOP_12,TOP_14 [注意:这是一个字符串])

Java有Contains方法来检查Val 1Val 2的值是什么,我想知道如何编写查询以了解Val 1是否在{{1} }} 或不。我不想使用Val 2,因为LIKE(字符串)包含Val 2的所有值,因此TOP查询的计数将为3。

2 个答案:

答案 0 :(得分:0)

你可以通过几种方式解决它。

DEMO数据库架构和数据:

CREATE TABLE `t1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `val1` varchar(128) NOT NULL
);
INSERT INTO `t1` (`val1`) VALUES('TOP_1'),('TOP_12'),('TOP_13');

CREATE TABLE `t2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `val2` varchar(128) NOT NULL
);
INSERT INTO `t2` (`val2`) VALUES('TOP_1,TOP_3'),('TOP_4,TOP_12');

FIND_IN_SET演示:

SELECT t1.*, IF(t2.id IS NOT NULL, 1, 0) AS in_val2
FROM t1
LEFT JOIN t2 ON FIND_IN_SET(t1.val1, t2.val2)

DEMO (in SQL Fiddle)

INSTR演示:

SELECT t1.*, IF(t2.id IS NOT NULL, 1, 0) AS in_val2
FROM t1
LEFT JOIN t2 ON INSTR(CONCAT('|', REPLACE(t2.val2, ',', '|'), '|'), CONCAT('|', t1.val1, '|'))

INSTR DEMO (in SQL Fiddle)

答案 1 :(得分:0)

您也可以使用LOCATE(substr,str)

有关详情,请参阅this

相关问题