2015-01-16 3 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 на выбранном вами языке программирования и затем выполнял проверки SQL на каждом номере. Можно написать функцию SQL, которая перебирает список в MySQL, но это проще сделать за пределами. – 576i

+0

Идея состоит в том, чтобы сделать что-то более простым, я мог бы создать временную таблицу и сделать там правое внешнее соединение. BUt это точно, что я не хочу делать :) – 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 ...» со списком документов.

Смежные вопросы