关联表上的sql whith OR

时间:2017-09-26 08:18:42

标签: php mysql

您好我有一个产品表(实际书籍),我需要创建一个复杂的搜索

我有一个用于搜索的文本框 所以当我在该文本框中写一个关键字时,我需要返回

的产品
__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命令

1 个答案:

答案 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