我有两张桌子:
TOP
)TOP,TOP_12,TOP_14
[注意:这是一个字符串]) Java有Contains
方法来检查Val 1
中Val 2
的值是什么,我想知道如何编写查询以了解Val 1
是否在{{1} }} 或不。我不想使用Val 2
,因为LIKE
(字符串)包含Val 2
的所有值,因此TOP
查询的计数将为3。
答案 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)
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, '|'))
答案 1 :(得分:0)
您也可以使用LOCATE(substr,str)
。
有关详情,请参阅this