MySQL 搜索两张表,从第一张表返回结果

我有两个表Products和Items。


每个产品包含项目关系product_id


产品表:


| id    | name          |

|----   |-----------    |

| 1     | Product 1     |

| 2     | Product 2     |


项目表:


| id    | product_id    | name      |

|----   |------------   |--------   |

| 1     | 1             | Item 1    |

| 2     | 2             | Item 2    |

所以我有搜索表产品的能力:


SELECT * FROM products WHERE name LIKE '%product 1%'

我想要实现的是如果有一个项目匹配返回它的父Product ,也可以在Items表上搜索的能力。


所以如果我搜索项目 1并且它链接到产品 1然后product_id返回产品 1


我试过了 :


(SELECT * FROM products WHERE name LIKE '%product 1%') UNION (SELECT * FROM items WHERE name LIKE '%item 1%')

当搜索关键字匹配时Product 1它返回产品,但如果搜索关键字是Item 1它返回item不是product,我希望在所有情况下只返回products。


我怎样才能做到这一点?


GCT1015
浏览 137回答 3
3回答

aluckdog

您可以将LEFT JOIN两个表相互关联product_id,然后在两个name字段中搜索以找到匹配项,如果匹配则返回产品名称。我们使用 aLEFT JOIN以便仍然可以搜索没有项目的产品。例如(搜索产品名称):SELECT p.id, p.nameFROM products pLEFT JOIN items i ON i.product_id = p.idWHERE p.name LIKE '%Product 1%'   OR i.name LIKE '%Product 1%'输出:id  name1   Product 1或搜索项目名称:SELECT p.id, p.nameFROM products pLEFT JOIN items i ON i.product_id = p.idWHERE p.name LIKE '%Item 1%'   OR i.name LIKE '%Item 1%'输出:id  name1   Product 1

互换的青春

您需要使用 JOIN 来联合。SELECT *FROM productsWHERE name LIKE '%search term%'UNIONSELECT p.*FROM products AS pJOIN items AS i ON p.id = i.product_idWHERE i.name LIKE '%search term%'

慕桂英546537

我会用:select p.*from products pwhere p.name LIKE '%search term%' or      exists (select 1              from items i              where i.product_id = p.id and                    i.name LIKE '%search term%'             );使用此公式,如果多个项目与产品匹配,您不必担心重复。
打开App,查看更多内容
随时随地看视频慕课网APP