在多个列中搜索多个值,这些值显示仅与MySQL匹配的所有记录

时间:2019-05-31 19:46:21

标签: mysql operators

我在如何构造语句上遇到问题,因此即使该值可能不在其他列中,它也会返回与多个列中的多个值匹配的记录...是的,我知道这听起来令人困惑,让我解释一下

假设我正在寻找2个值(“ this”和“ that”)。还要说,我正在这些值的4个不同的列中查找。这是我提出的2个方案陈述,但都无法正常工作,我将逐一解释。

使用AND运算符

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    AND column2 LIKE '%this%'
    AND column3 LIKE '%this%'
    AND column4 LIKE '%this%'
    AND column1 LIKE '%that%'
    AND column2 LIKE '%that%'
    AND column3 LIKE '%that%'
    AND column4 LIKE '%that%')

如果我对语句使用 AND 运算符,则每个值都必须在每一列中,否则该语句将不返回任何记录。因此,假设它在column2中找到“ this”并在column1中找到“ that”。即使在这2列中找到了这些值,由于在column3column 4

中找不到这些值,它仍将不返回任何记录。

使用OR运算符

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    OR column2 LIKE '%this%'
    OR column3 LIKE '%this%'
    OR column4 LIKE '%this%'
    OR column1 LIKE '%that%'
    OR column2 LIKE '%that%'
    OR column3 LIKE '%that%'
    OR column4 LIKE '%that%')

如果我使用 OR 运算符,那么它将返回所有包含任何列中任何值的记录,即使该记录可能只包含这些值之一而不是全部都没有。< / p>

我试图用我的语句完成的操作是仅返回在任何列中同时包含“ this”和“ that”的记录,即使其他列可能不包含这些值。

希望这很有道理。

1 个答案:

答案 0 :(得分:2)

使用ANDOR的组合。

SELECT * FROM table 
WHERE (column1 LIKE '%this%'
    OR column2 LIKE '%this%'
    OR column3 LIKE '%this%'
    OR column4 LIKE '%this%')
AND (column1 LIKE '%that%'
    OR column2 LIKE '%that%'
    OR column3 LIKE '%that%'
    OR column4 LIKE '%that%')