MySQL在表中的多个列上使用多个条件选择

时间:2016-01-26 11:14:11

标签: mysql sql

我有一个名为Database1的数据库和名为table1的表。表中的列是Client Name和Country.I想要根据使用LIKE的条件搜索客户端,并希望在结果中排​​除客户端NOT LIKE(不在国家。

Client Name,Country

Sandeep,India

Mandeep,USA

John,Japan

Vinay,China

Amit,USA

etc...

我尝试了以下陈述的查询。它确实给出了结果,但没有过滤或排除不喜欢的国家/地区,而是显示所有国家/地区。

SELECT CLIENT NAME,
       COUNTRY
FROM DATABASE1.TABLE1
WHERE (CLIENT NAME LIKE 'VINAY')
  OR (CLIENT NAME LIKE 'AMIT')
  AND COUNTRY NOT IN ('INDIA',
                      'JAPAN')

我也试过NOT LIKE

SELECT CLIENT NAME,
       COUNTRY
FROM DATABASE1.TABLE1
WHERE (CLIENT NAME LIKE 'VINAY')
  OR (CLIENT NAME LIKE 'AMIT')
  AND (COUNTRY NAME NOT LIKE 'INDIA')
  AND (COUNTRY NAME NOT LIKE 'JAPAN')

上述两项都给出了结果但没有过滤掉/排除印度和中国的结果。尽管使用了不喜欢/不在,所有国家都出现了结果

任何解决方案或我的错误是什么?

2 个答案:

答案 0 :(得分:0)

两个队列的变化:

查询1:

SELECT CLIENT NAME,
       COUNTRY
FROM DATABASE1.TABLE1
WHERE (CLIENT NAME LIKE 'VINAY' OR CLIENT NAME LIKE 'AMIT')
  AND COUNTRY NOT IN ('INDIA', 'JAPAN')

查询2:

SELECT CLIENT NAME,
       COUNTRY
FROM DATABASE1.TABLE1
WHERE (CLIENT NAME LIKE 'VINAY' OR CLIENT NAME LIKE 'AMIT')
  AND COUNTRY NAME NOT LIKE 'INDIA' AND COUNTRY NAME NOT LIKE 'JAPAN'

答案 1 :(得分:0)

AND的{​​{3}}高于OR,因此您的第一个过滤器相当于:

(CLIENT NAME LIKE 'VINAY') OR (
  (CLIENT NAME LIKE 'AMIT') AND COUNTRY NOT IN ('INDIA','JAPAN')
)

同样,您的第二个过滤器相当于:

(CLIENT NAME LIKE 'VINAY') OR (
  (CLIENT NAME LIKE 'AMIT') AND
  (COUNTRY NAME NOT LIKE 'INDIA') AND
  (COUNTRY NAME NOT LIKE 'JAPAN')
)

要指定替代优先顺序,您应该包含明确的括号:

(CLIENT NAME LIKE 'VINAY' OR CLIENT NAME LIKE 'AMIT')
AND COUNTRY NOT IN ('INDIA','JAPAN')

(请注意,在自己的括号中包含个别术语不会产生任何影响,因此我已删除它们。)

另请注意,对于IN()条款,您的表达式可以使用OR缩写:

CLIENT NAME IN ('VINAY','AMIT') AND COUNTRY NOT IN ('INDIA','JAPAN')