我想编写一个查询,其中我有两列来比较我的数据但需要在一列上使用LIKE。像这样:
SELECT `name` , `country`
FROM details
WHERE (`email`, `phone`)
IN (
("abc@abc.com",'%123'), ("def@def.com",'%456'), ("ghi@ghi.com",'%789') )
请指导我如何撰写此查询。谢谢!
答案 0 :(得分:1)
您可以将where
子句简化为:
WHERE phone LIKE '%302024' AND
email in ('abc@abc.com', 'def@def.com', 'ghi@ghi.com')
编辑:
对于修改后的问题,您可以使用一系列AND
和OR
:
WHERE (phone like '%123' and email = 'abc@abc.com) OR
. . .
如果列表很长,您可能希望将值放入表中并使用join
或exists
子句。
答案 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