2015-03-24 112 views
1

我試圖瞭解爲什麼下面的查詢不起作用。如果一個字段是另一個表中某個字段的子字符串,從表中選擇行

我的架構:

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

你有這樣的:

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()是一個函數和函數的自變量是由逗號而非+分離。

+0

Doh ...我真的不應該這樣做,當我這個累了。非常感謝。 – sboss 2015-03-24 21:57:30

+0

如何將行插入product_categories表中,以獲得每個匹配類別的產品?對於ID爲1的產品,我希望產品= 1和類別= 1以及產品= 1和類別= 1的「product_categories」中有兩行。 – sboss 2015-03-24 22:33:33

+0

嗯......爲什麼這聽起來像是一個新問題? :-) – 2015-03-24 22:48:28

相關問題