我有两张table产品和物品。
每个产品都包含按关系排序的项 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%'
我试图实现的是,如果有一个项目匹配返回它的父产品,也可以在items表上搜索。
所以如果我搜索项目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
.
我怎样才能做到这一点?
谢谢
3条答案
按热度按时间oewdyzsn1#
你需要一个联合体。
r6hnlfcb2#
你可以
LEFT JOIN
这两张table靠在一起product_id
然后在两者中搜索name
字段来查找匹配项,如果需要,则返回产品名称。我们使用LEFT JOIN
这样,没有项目的产品仍然可以被搜索。例如(搜索产品名称):输出:
或搜索项目名称:
输出:
在dbfiddle上演示
twh00eeo3#
我会用:
有了这个公式,你不必担心如果多个项目匹配一个产品重复。