获取与另一个表不匹配的所有行

时间:2013-01-06 12:27:03

标签: php mysql sql-like concat

我有一个棘手的问题。我有一张数字表:

  • 37823782
  • 37823782
  • 37823782
  • 38478934
  • 90003922

另一张带有前缀的表:

  • 378
  • 3847
  • 384
  • 001

我想找到与最长前缀匹配的所有数字。我成功完成了这段代码:

    $result = mysql_query("SELECT numbers FROM table1 GROUP BY numbers") or die ("Query error code 1"); 
while($row = mysql_fetch_array($result))
{

    $numbers =$row["numbers"];

    $result2 = mysql_query("SELECT * FROM table2 WHERE '".$numbers."' LIKE CONCAT(prefix, '%') ORDER BY CHAR_LENGTH(prefix) DESC LIMIT 1");
    while($row2 = mysql_fetch_array($result2))
    {

        // That's it

    }       

}

现在我想简单地做出相反的事情。我想找到所有不匹配任何前缀的数字。总之,在上面的例子中,我得到了“90003922”。我想使用 NOT LIKE CONCAT(前缀,'%'),但它不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这个

SELECT * FROM table2 WHERE '".$numbers."' NOT LIKE 'prefix%'

答案 1 :(得分:1)

单查询解决方案将如下所示。试试吧

SELECT * FROM table1 LEFT JOIN table2 ON table1.numbers LIKE CONCAT(table2.prefix,'%') WHERE table2.prefix IS NULL