2012-07-09 25 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%'