您好我有一个产品表(实际书籍),我需要创建一个复杂的搜索
我有一个用于搜索的文本框 所以当我在该文本框中写一个关键字时,我需要返回
的产品__wakeup
在sql中我必须为上面的每一个创建4个OR部分 而且我很难为关联表编写sql
问题是我不能使用INNER JOIN,因为这意味着关联表必须有一个记录 但就我而言,这不是必要的。 在我的情况下,这必须是OR
the title LIKE the keyword (products table has a field title)
the ISBN LIKE the keyword (products table has a field isbn)
the products that keyword LIKE author name (this is a associative table product_authors)
the products that keyword LIKE company name (this is a associative table product_companies)
我认为我必须使用一个子选择,但我不确定,我对它有点困惑。
ex
SELECT *
FROM products as p
WHERE
(
title LIKE '%keyword%'
OR
isbn LIKE '%keyword%'
OR
(how can i use OR when data are on associative table product_authors)
OR
(how can i use OR when data are on associative table product_companies)
)
任何人都可以帮我写sql命令
答案 0 :(得分:1)
如果内部联接不利于你,为什么不选择左联? 您可能希望按产品分组,因为左边加入公司或作者表可能会给您一对多的关系
select
*
from
products p
left join product_authors on product_id
left join authors on author_id
left join product_companies on product_id
left join companies on company_id
where
title like '%keyword%'
or isbn like '%keyword%'
or author_name like '%keyword%'
or company_name like '%keyword%'
group by -- add this group by if multiple authors or companies can be linked to the same product
company_id