首先,这是我正在研究的表格的简化版本:
╔═══════╦═══════════╦══════════╦═══════════╗
║ ID ║ FIRSTNAME ║ LASTNAME ║ COMPANYID ║
╠═══════╬═══════════╬══════════╬═══════════╣
║ 12345 ║ Bob ║ Smith ║ 3 ║
║ 13826 ║ Bob ║ Smith.Mr ║ 3 ║
║ 16326 ║ Bob ║ Smith Mr ║ 3 ║
║ 16382 ║ Dr.Bob ║ Smith ║ 3 ║
║ 18372 ║ Kim ║ Johnson ║ 3 ║
╚═══════╩═══════════╩══════════╩═══════════╝
鉴于只有id 12345,我应该能够根据我从12345和他的公司ID获得的所有记录获得所有记录,所以基本上所有记录都来自公司3的Bob Smith。
我不确定如何处理这个查询,我需要一种方法来从他的名字和名字中删除任何标题,空格或点。我假设我将使用姓氏连接名字并运行一个函数来删除我所拥有的内容:
Mr,Dr,Jr,Sr等...
结束了bobsmith。我需要对与id 12345关联的名称以及WHERE
子句中的名称执行此操作,对吧?这将是比较名称。
我正在努力使这个查询尽可能快速有效,我应该使用子SELECT
吗?我应该创建一个FUNCTION
吗?不确定如何在.net
中执行此操作。
非常感谢任何想法。
编辑:应该提到客户端也可能向我发送ID 13826,这是给Bob Smith.Mr而我仍然需要得到Bob Smith ID 12345,所以我想我会肯定要剥夺标题等......
答案 0 :(得分:2)
SELECT b.*
FROM tableName a
INNER JOIN tableName b
ON a.companyID = b.companyID
WHERE a.id = 12345 AND
b.firstName LIKE CONCAT('%', a.firstName, '%') AND
b.lastName LIKE CONCAT('%', a.lastName, '%')
输出
╔═══════╦═══════════╦══════════╦═══════════╗
║ ID ║ FIRSTNAME ║ LASTNAME ║ COMPANYID ║
╠═══════╬═══════════╬══════════╬═══════════╣
║ 12345 ║ Bob ║ Smith ║ 3 ║
║ 13826 ║ Bob ║ Smith.Mr ║ 3 ║
║ 16382 ║ Dr.Bob ║ Smith ║ 3 ║
╚═══════╩═══════════╩══════════╩═══════════╝
答案 1 :(得分:0)
试试这个:
SELECT
id,
firstname,
lastname,
companyID
FROM
my_table
WHERE
companyID = (SELECT companyID FROM my_table WHERE id = 12345)
AND firstname LIKE CONCAT('%',(SELECT firstname FROM my_table WHERE id = 12345),'%')
AND lastname LIKE CONCAT('%',(SELECT lastname FROM my_table WHERE id = 12345),'%')
或者最快的方式:
SELECT
id,
firstname,
lastname,
companyID
FROM
my_table
WHERE
companyID = @companyID
AND firstname LIKE '%@firstname%'
AND lastname LIKE '%@lastname%'
其中@ companyID,@ firstname,@ lastname是此查询的值:
SELECT companyID,firstname,lastname FROM my_table WHERE id = 12345
答案 2 :(得分:0)
您需要规范化您的数据。
首先,申请
lower(name)
将全部转换为小写
第二个正常步骤是移除MR。和东西。您使用REPLACE(name, "mr.", "")
如果你有其他垃圾请不要忘记substring_index存在
substring_index(name, 'Mr.', -1)
会将字符串的一部分返回到先生
在完成之后,只需按照其他人所说的去做,减去正则表达式
select *
from table as t1
inner join table as t2
on t1.firstname=t2.firstname
and t1.lastname=t2.lastname
and t1.companz=t2.companz
where t2.user_id=12345
让你开始,你正在寻找
create table step1
select id, lower(name) as name,... from user;
create table step2
select id, replace(name, "mr.", "")... from step1;