2012-07-09 76 views
0

我有这两个表,我希望能够使用LIKE在brand.NAME和product.NAME中搜索一个字符串。使用CONCAT与JOINS结合,我一直不成功,所以这是高于我的薪酬级别。在两个独立表格的CONCATed列上使用LIKE

这甚至可能吗?

通缉行为

搜索 “NIKE SH”

结果:

NIKE Shoes 
NIKE shirts 

产品

ID | NAME | brandID | 
1 | Shoes | 1  | 
2 | pants | 2  | 
3 | shorts | 3  | 
4 | shirts | 1  | 
5 | socks | 2  | 

品牌

ID | NAME | 
1 | NIKE | 
2 | Adidas | 
3 | Hummel | 
+0

请添加你所期望的结果的一个例子至少! – 2012-07-09 18:14:28

+0

请分享您尝试过的查询。 – 2012-07-09 18:14:56

+0

为什么你不做一些像WHERE Product.Name LIKE“x”或Brand.Name LIKE“x”的东西。是否需要concat? – Scotch 2012-07-09 18:16:55

回答

0

您必须加入两个表,然后运行LIKE。一个警告:如果你做一个直的CONCAT,“耐克鞋”永远不会匹配,因为你将拥有“耐克鞋”。

SELECT ... FROM Product JOIN Brand ON(Product.BrandId = Brand.Id)WHERE CONCAT(Product.name,'',Brand.name)LIKE'%ike Sho%';

编辑:这就是说,我同意其他海报 - 单独查看品牌和产品会更有优势。除非你有一个“谷歌喜欢”的搜索,用户可以输入他想要的任何东西 - 但在这种情况下,我会尝试修改UI。

+0

其实这是最准确的答案,除了切换品牌和产品,这是100%完美。不得不改变答案,因为这是最好的,并寻求其他解决方案。 – DeadClass 2012-07-09 19:08:22

0
.. where Product.name like '%pattern%' or Brand.name like '%pattern%' 

运作的?

话虽如此,或者是昂贵的,所以是一个模式搜索开始与野生字符。两者都会花费你不少。

0

初稿,盲目猜...

SELECT * FROM product 
INNER JOIN brand 
ON product.brandID = brand.id 
WHERE product.name LIKE '%string%' 
OR brand.name LIKE '%string%' 

编辑以匹配问题变化...

SELECT * FROM product 
INNER JOIN brand 
ON product.brandID = brand.id 
WHERE product.name + ' ' + brand.name LIKE '%string%' 
+0

这正是我所期待的。我很抱歉没有更清楚地陈述我的问题。我向你保证,这只是因为缺乏知识才能做到这一点,而不是懒惰。我看到头顶上,但对于规模来说,这是非常可靠的。非常感谢:) – DeadClass 2012-07-09 18:27:20

+0

这个编辑答案似乎不匹配任何东西。 – DeadClass 2012-07-09 18:46:41

+0

你是说我的*无修正答案是正确的吗?如果是这样,我会改回它。 – egrunin 2012-07-09 18:52:19

0
SELCT * FROM 
(SELECT P.NAME + B.NAME AS product_brand 
FROM product AS P 
INNER JOIN brand as B 
ON 
P.brandID = B.ID) SQ 
WHERE 
SQ.product_brand like '%whatever%'