【问题标题】:SQL query: Where and like statmentsSQL 查询:Where 和 like 语句
【发布时间】:2020-01-15 13:40:37
【问题描述】:
我正在尝试进行查询以获取其中一列中有 null 的结果,但由于某种原因,当我使用 like 时,我排除非 null 字段的部分不起作用
SELECT * FROM my_column WHERE title LIKE "%hea%" OR department LIKE "%hea%" OR title_pt LIKE "%hea%" AND deleted_at IS NULL LIMIT 10 OFFSET 0
【问题讨论】:
标签:
mysql
sql
database
mariadb
【解决方案1】:
你需要括号
SELECT * FROM my_column WHERE (title LIKE "%hea%" OR department LIKE "%hea%" OR
title_pt LIKE "%hea%") AND deleted_at IS NULL LIMIT 10 OFFSET 0
把它想象成数学,你必须告诉它运算的顺序。您实际上是在请求 title_py LIKE "%hea" AND deleted_at IS NULL,而其他 ORs 根本没有与 AND 交互。
【解决方案2】:
这是你写的:
SELECT * FROM my_column
WHERE (title LIKE "%hea%") OR (department LIKE "%hea%")
OR ((title_pt LIKE "%hea%") AND (deleted_at IS NULL))
LIMIT 10 OFFSET 0
你想要这个:
SELECT * FROM my_column
WHERE ((title LIKE "%hea%") OR (department LIKE "%hea%") OR (title_pt LIKE "%hea%"))
AND (deleted_at IS NULL)
LIMIT 10 OFFSET 0
【解决方案3】:
括号只会为您提供deleted_at NULL 且其他条件之一为 TRUE 的行:
SELECT *
FROM my_column
WHERE (
title LIKE "%hea%"
OR department LIKE "%hea%"
OR title_pt LIKE "%hea%"
)
AND
deleted_at IS NULL
LIMIT 10 OFFSET 0