SQL 中关于通配符的问题
Questions on wildcards in SQL
Sample 'gov_form' The correct query The question
我正在研究一个问题,该问题要求我前往 select 政府形式不是 'Constitutional Monarchy' 或 'Republic' 的国家/地区。
给出的答案是 WHERE (gov_form = 'Constitutional Monarchy' OR gov_form LIKE '%Republic%') 。我试图将它们关闭为 (gov_form LIKE 'Constitutional Monarchy%' OR gov_form = 'Republic') 但这是错误的,显然行数不同。
我很困惑,因为还有另外两个字段包含“君主立宪制(酋长国)”和 'Constitutional Monarchy,Federation' 那么为什么我不能使用通配符“%”???
还有'Republic'中的'variations'对table中的'People'sRepublic'、'Socialist Republic'、'Federal Republic'等'Constitutional Monarchy'!!但考虑到问题是要求不包括 'Republic',为什么我要使用 '%' 来免除 'Republic' 的所有 'variations'???
谁能帮帮我?
其中 gov_form 不喜欢 '%Constitutional Monarchy%' AND gov_form NOT LIKE '%Republic%'
对我来说
Countries that do not have gov_form of Constitutional Monarchy
(要点 1)
表示
countries where gov_form <> (not equal) 'Constitutional Monarchy'
和
countries that do not have republic in their gov form
(要点 2)
表示
Countries where gov_form does not contain the text "republic"
这将是
WHERE gov_form <> 'Constitutional Monarchy' AND gov_form NOT LIKE '%Republic%'
子查询希望将其转变为因为它使用 NOT IN
,所以在子查询中,我们基本上是说
Show me those where gov_frm IS EQUAL TO 'Constitutional Monarchy' and gov_form IS LIKE '%republic%'
哪些是我们不想查看的记录,外部查询使用NOT IN
排除了这些记录
在我看来,这个问题写得和布局都不好,绝对可以解释。根据对问题的三种不同理解,我已经将这个答案重写了三次。此外,我会说使用常规 JOIN
可以更好地解决这个问题并且更容易阅读
任何编程任务的最大挑战是用人类语言理解需要什么。一旦完成,剩下的就“简单”了
如果要排除政府类型包含 Constitutional Monarchy
或 Republic
的记录,则可以使用 NOT
,如下所示:
WHERE not (gov_form like '%Constitutional Monarchy%'
OR gov_form LIKE '%Republic%')
Sample 'gov_form' The correct query The question
我正在研究一个问题,该问题要求我前往 select 政府形式不是 'Constitutional Monarchy' 或 'Republic' 的国家/地区。
给出的答案是 WHERE (gov_form = 'Constitutional Monarchy' OR gov_form LIKE '%Republic%') 。我试图将它们关闭为 (gov_form LIKE 'Constitutional Monarchy%' OR gov_form = 'Republic') 但这是错误的,显然行数不同。
我很困惑,因为还有另外两个字段包含“君主立宪制(酋长国)”和 'Constitutional Monarchy,Federation' 那么为什么我不能使用通配符“%”???
还有'Republic'中的'variations'对table中的'People'sRepublic'、'Socialist Republic'、'Federal Republic'等'Constitutional Monarchy'!!但考虑到问题是要求不包括 'Republic',为什么我要使用 '%' 来免除 'Republic' 的所有 'variations'???
谁能帮帮我?
其中 gov_form 不喜欢 '%Constitutional Monarchy%' AND gov_form NOT LIKE '%Republic%'
对我来说
Countries that do not have gov_form of Constitutional Monarchy
(要点 1)
表示
countries where gov_form <> (not equal) 'Constitutional Monarchy'
和
countries that do not have republic in their gov form
(要点 2)
表示
Countries where gov_form does not contain the text "republic"
这将是
WHERE gov_form <> 'Constitutional Monarchy' AND gov_form NOT LIKE '%Republic%'
子查询希望将其转变为因为它使用 NOT IN
,所以在子查询中,我们基本上是说
Show me those where gov_frm IS EQUAL TO 'Constitutional Monarchy' and gov_form IS LIKE '%republic%'
哪些是我们不想查看的记录,外部查询使用NOT IN
在我看来,这个问题写得和布局都不好,绝对可以解释。根据对问题的三种不同理解,我已经将这个答案重写了三次。此外,我会说使用常规 JOIN
任何编程任务的最大挑战是用人类语言理解需要什么。一旦完成,剩下的就“简单”了
如果要排除政府类型包含 Constitutional Monarchy
或 Republic
的记录,则可以使用 NOT
,如下所示:
WHERE not (gov_form like '%Constitutional Monarchy%'
OR gov_form LIKE '%Republic%')