【问题标题】:MySql Searching two tables and comparing columns with like and %MySql搜索两个表并用like和%比较列
【发布时间】:2011-01-24 04:20:25
【问题描述】:

我正在尝试从两个表中选择数据并将其插入另一个表中。当每个表中的某些内容匹配时,我想选择数据。问题是其中一个比较需要是类似的,而我不知所措。 sql语句如下,我相信它至少会显示我正在尝试做的事情。

insert into hr_numbers 
  (`user_id`, `hr_number`) 
  select distinct u.user_id, t.num 
    from temp t, users u 
   where t.name like '%' + u.l_name + '%';

我尝试过使用程序,但无法弄清楚,甚至无法判断这是否会有所帮助。

【问题讨论】:

  • 这看起来是一个合理的开始。我们需要更多关于您正在处理的数据、您期望获得什么以及您实际获得什么的示例,以便能够提供帮助。

标签: mysql sql search sql-like


【解决方案1】:

首先,确保 SELECT 在尝试插入之前返回您想要的内容。这个:

SELECT DISTINCT 
       u.user_id, 
       t.num 
  FROM temp t, users u 
 WHERE t.name like '%' + u.l_name + '%'

...正在使用 ANSI-89 JOIN 语法。 ANSI-92 连接语法是更好的选择:

SELECT DISTINCT
       u.user_id,
       t.num
  FROM USERS u
  JOIN TEMP t ON t.name LIKE CONCAT('%', u.l_name ,'%')

...但是连接标准看起来有缺陷。如果姓氏出现在t.name 值中,它将链接行,导致史密斯问题:如果姓氏是“史密斯”,所有行都将链接起来——即使名字是约翰、吉姆等。

【讨论】:

  • 一句警告,如果u.l_name包含%或_等特殊字符,LIKE CONCAT('%', u.l_name ,'%')会给出意想不到的结果
【解决方案2】:

试试这个:

INSERT INTO hr_numbers(`user_id`, `hr_number`)
SELECT DISTINCT U.user_id, T.num
FROM temp T
INNER JOIN users U ON T.NAME LIKE '%' + U.l_name + '%'

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多