仅当产品名称中未显示表格中的文本模式时,才尝试显示查询结果。
+-----------------------------------------+ +--------+
| Product Name | |pattern |
+-----------------------------------------+ +--------+
|Gangster Barbie with guns & accessories | | Gun |
|Very Safe Playdoh | | Drug |
|Star Wars Lego | | nam |
|Transformers Decepticon Druglord | | |
|GTA: Namcat Version | | |
+-----------------------------------------+ +--------+
想得到结果:
+-----------------------------------------+
| Product Name |
+-----------------------------------------+
|Very Safe Playdoh |
|Star Wars Lego |
+-----------------------------------------+
我尝试过LIKE或INSTR,例如:
select `Product_Name`
from Product_table
where NOT LIKE '%'+(select `text_pattern`.`Keywords` from `text_pattern`)+'%';
但似乎没有一个正常工作。有人可以帮忙或指出正确的方向吗?
答案 0 :(得分:1)
以下是使用not exists
的一种方法:
select p.*
from product p
where not exists (select 1
from patterns pat
where p.name like concat('%', pat.pattern, '%')
);
注意:MySQL不使用+
进行字符串连接。它使用concat()
函数。
答案 1 :(得分:0)
E.g.
DROP TABLE IF EXISTS product;
CREATE TABLE product
(name VARCHAR(50) NOT NULL PRIMARY KEY);
INSERT INTO product VALUES
('Gangster Barbie with guns & accessories'),
('Very Safe Playdoh'),
('Star Wars Lego'),
('Transformers Decepticon Druglord'),
('GTA: Namcat Version');
DROP TABLE IF EXISTS patterns;
CREATE TABLE patterns
(pattern VARCHAR(12) PRIMARY KEY);
INSERT INTO patterns VALUES
('Gun'),('Drug'),('nam');
SELECT * FROM product a LEFT JOIN patterns b ON a.name LIKE CONCAT('%',b.pattern,'%');
+-----------------------------------------+---------+
| name | pattern |
+-----------------------------------------+---------+
| Gangster Barbie with guns & accessories | Gun |
| GTA: Namcat Version | nam |
| Star Wars Lego | NULL |
| Transformers Decepticon Druglord | Drug |
| Very Safe Playdoh | NULL |
+-----------------------------------------+---------+