我想做一个包含'like'和'not like'的查询。 当前查询:
SELECT *
FROM `final`
WHERE ( `T_Degree` LIKE '%Keyword1%' )
and (`A_Author_Translator_State` NOT LIKE 'Keyword2'
or `T_Author` NOT LIKE 'Keyword2'
or `T_Author_State` NOT LIKE 'Keyword2' )
ORDER BY `Kind` ASC
但这不起作用。有什么提示吗?
答案 0 :(得分:1)
只需将or
更改为and
,假设您不希望这三个字段都不像'Keyword2':
SELECT *
FROM `final`
WHERE ( `T_Degree` LIKE '%Keyword1%' )
and (`A_Author_Translator_State` NOT LIKE 'Keyword2'
and `T_Author` NOT LIKE 'Keyword2'
and `T_Author_State` NOT LIKE 'Keyword2' )
ORDER BY `Kind` ASC;
顺便说一下,因为您没有使用通配符,所以可以将其标记为:
SELECT *
FROM final
WHERE T_Degree LIKE '%Keyword1%' and
Keyword2 not in (A_Author_Translator_State, T_Author, T_Author_State)
ORDER BY Kind ASC;
答案 1 :(得分:0)
您可能需要更好地澄清您想要实现的目标,但这可能适用于您想要的内容。
SELECT *
FROM `final`
WHERE ( `T_Degree` LIKE '%Keyword1%' )
AND NOT (`A_Author_Translator_State` LIKE 'Keyword2'
or `T_Author` LIKE 'Keyword2'
or `T_Author_State` LIKE 'Keyword2' )
ORDER BY `Kind` ASC
答案 2 :(得分:0)
如果你不使用通配符(%),你基本上都在检查两者是否相同。
换句话说:
WHERE `ColumnName` LIKE 'Value'
与:
相同WHERE `ColumnName` = 'Value'
(您只能找到“值”和列内容完全相同的记录)
如果要查找ColumnName
包含该值的记录,则需要使用通配符:
WHERE `ColumnName` LIKE '%Value%'
如果您只想查找ColumnName
的值以'值'开头的记录(换句话说,它前面不应该有任何内容),请使用:
WHERE `ColumnName` LIKE 'Value%'
让我们考虑一下这个表(名为myTable):
ID | Description
----------------
1 | Lorem Ipsum dolar sit amet
2 | Lorem ipsum FooBar dolar sit amet
3 | FooBar
4 | Foo Bar
现在这个查询:
SELECT *
FROM `myTable`
WHERE `Description` LIKE '%FooBar%'
将返回第2行和第3行。 不会返回第1行,因为它不包含'FooBar'。 不会返回第4行,因为它也不包含'FooBar'。 (它确实包含'Foo Bar',但这不一样)
现在让我们看看使用其他查询会发生什么:
SELECT *
FROM `myTable`
WHERE `Description` LIKE 'FooBar%'
(请注意,<{1}} 之前 FooBar已被删除)
此查询只返回第3行,因为这是以FooBar开始的唯一行。