如果字段是另一个表中字段的子字符串,请从表中选择行

时间:2015-03-24 21:22:19

标签: mysql

我试图理解为什么以下查询无效。

我的架构:

CREATE TABLE category
    (`id` int, `category_name` varchar(55))
;

CREATE TABLE product
    (`id` int, `name` varchar(55), `categories` varchar(50))
;

CREATE TABLE product_categories
    (`id` int, `product` int, `category` int)
;

INSERT INTO category
    (`id`, `category_name`)
VALUES
    (1, 'Home'),
    (2, 'Design')
;

INSERT INTO product
    (`id`, `name`, `categories`)
VALUES
    (1, 'Magazine', 'Home/Design/Interior'),
    (2, 'Book', 'Internet/Technology')
;

查询:

SELECT
category.id
FROM category
JOIN product
ON product.categories LIKE CONCAT('%' + category.category_name + '%')

http://sqlfiddle.com/#!9/b3119/5

1 个答案:

答案 0 :(得分:1)

你有这个:

SELECT
category.id
FROM category
JOIN product
ON product.categories LIKE CONCAT('%' + category.category_name + '%');

它应该是这样的:

SELECT *
FROM category
JOIN product
ON product.categories LIKE CONCAT('%', category.category_name, '%');

CONCAT()是一个函数,函数的参数用逗号而不是+分隔。