喜欢一列,IN喜欢另一列

时间:2015-05-15 17:34:48

标签: mysql

我想编写一个查询,其中我有两列来比较我的数据但需要在一列上使用LIKE。像这样:

SELECT `name` , `country` 
FROM details
WHERE (`email`, `phone`)
IN (
("abc@abc.com",'%123'), ("def@def.com",'%456'), ("ghi@ghi.com",'%789') )

请指导我如何撰写此查询。谢谢!

3 个答案:

答案 0 :(得分:1)

您可以将where子句简化为:

WHERE phone LIKE '%302024' AND
      email in ('abc@abc.com', 'def@def.com', 'ghi@ghi.com')

编辑:

对于修改后的问题,您可以使用一系列ANDOR

WHERE (phone like '%123' and email = 'abc@abc.com) OR
      . . .

如果列表很长,您可能希望将值放入表中并使用joinexists子句。

答案 1 :(得分:0)

作为col IN ('Foo', 'Foo%')的IN语句相当于(col = 'FOO' OR col = 'Foo%'),如您所见,不会考虑LIKE子句中的通配符,以达到您的要求,将需要将您的where子句划分为以下内容:

SELECT name, country 
  FROM details
 WHERE (phone LIKE '%123' OR phone LIKE '%456' OR phone LIKE '%789')
   AND email IN ('abc@abc.com', 'def@def.com', 'ghi@ghi.com')

答案 2 :(得分:0)

由于一封电子邮件可以有多个电话号码但只有一个搜索,您将需要(或可能已经拥有)带有电子邮件的表格。在那里你需要添加搜索字符串然后进行定位而不是像。

create table emaildetails (email char(20), phonesearch char(15))

insert into emaildetails values ("abc@abc.com", "302024")
insert into emaildetails values ("def@def.com", "024")
insert into emaildetails values ("ghi@ghi.com", "15")

select d.*,ed.* from details d, emaildetails ed
where d.email in ('abc@abc.com', 'ghi@ghi.com')
and d.email = ed.email
and locate(ed.phonesearch, d.phone)>1