2015-01-16 83 views
0

我有一个表作为doc_number列的客户端列,我也有客户端文档的列表,我不知道它们是否存在于客户端表中。过滤器和条件

现在的问题是,是否有任何简单的方法可以让所有在该列表中而不在表格中的客户获得?

我不想使用辅助表,谢谢!

+0

试图澄清你的问题 –

回答

1

您可以编写自己的功能

CREATE DEFINER=`root`@`localhost` FUNCTION `filter_clients`(InString Varchar(1000)) RETURNS varchar(1000) CHARSET utf8 
BEGIN 

    # loop to divide string list by comma 

    # select for each string segment 

    # add result to Outstring.i 

RETURN OutString; 
END 

后来与

SELECT filter_clients('123456, 1234658, 145678') 

调用它,我不会做到这一点,将列表中的其他语言

+0

可能我并不清楚,但我没有第二张表只是像这样的文件列表(123456,1234658,145678),但更长! – theGabyRod

+0

如果问题是(123456,1234658,145678)中的哪一个不在客户端表中,那么我会按照您选择的编程语言将MySQL列表分割到MySQL之外,然后对每个数字运行SQL检查。可以编写一个循环遍历MySQL中的列表的SQL函数,但这很容易在外面完成。 – 576i

+0

的想法是做更简单的事情,我可以创建一个临时表,并在那里做一个正确的外部连接。 BUT多数民众赞成thatlllly什么我不想做:) – theGabyRod

0

您可以使用派生表:

SELECT * FROM (
    SELECT 2000 AS doc_number 
    UNION ALL SELECT 2001 
    UNION ALL SELECT 2002 
    UNION ALL SELECT 2003 
    UNION ALL SELECT 2004 
    UNION ALL SELECT 2005 
    UNION ALL SELECT 2006 
) b 
WHERE b.doc_number NOT IN (SELECT doc_number FROM client) 

只需打开一个电子表格并使用文档列表进行“union all select ...”。