【问题标题】:Conditional statements in MySQLMySQL 中的条件语句
【发布时间】:2014-02-11 01:35:57
【问题描述】:

我有两个表,我正在尝试按姓氏和名字匹配数据。由于我有多个同名客户,因此我想尝试查看(在之前的查询中)电话号码或街道地址是否匹配。有没有办法在一个语句中做到这一点?

到目前为止,我的简单陈述是:

SELECT * 
FROM table1, table2
WHERE table1.LAST_NAME = table2.LAST_NAME 
AND table1.FIRST_NAME = table2.FIRST_NAME 

我不确定是否有办法在 MySQL 中执行以下操作: IF (table1.LAST_NAME = table2.LAST_NAME) AND (table1.FIRST_NAME = table2.FIRST_NAME) 等于结果并且找到重复项,根据街道地址或电话进行匹配。如果没有找到重复项,只需按名称匹配即可。

【问题讨论】:

  • 为什么不总是根据另外的街道地址或电话进行匹配?
  • 我们可能会遇到一些情况,一张桌子既没有地址也没有电话号码。
  • 哦,我想这并不难,让我来试试吧……

标签: mysql


【解决方案1】:

您可以通过添加对空白的检查来使额外的比较成为可选,如下所示:

SELECT * 
FROM table1, table2
WHERE table1.LAST_NAME = table2.LAST_NAME 
AND table1.FIRST_NAME = table2.FIRST_NAME 
AND (table1.PHONE = table2.PHONE OR table1.PHONE = '' OR table2.PHONE = '')
AND (table1.ADDRESS = table2.ADDRESS OR table1.ADDRESS = '' OR table2.ADDRESS = '')

这样,如果任一表的PHONE字段为空,则比较通过,因此没有过滤作用。

【讨论】:

  • 这似乎有效,但如果有匹配的名称,但地址不匹配,它看起来不会返回结果。例如,一张表列出“Maple Lane”,另一张表列出“Maple LN”。我的大问题是两个表都没有标准化数据。但你的答案肯定会接近我想要的地方。谢谢!
  • 对于非标准化数据,人类智能是最好的,但您可以通过字符串替换中完成的一组标准调整来接近,例如“LN”的“Lane”
猜你喜欢
  • 2020-01-18
  • 2012-08-17
  • 2014-01-03
  • 2018-03-15
  • 1970-01-01
  • 2013-09-21
  • 2014-06-19
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多