【问题标题】:Filter and conditions过滤器和条件
【发布时间】:2015-03-15 05:03:33
【问题描述】:

我有一个表,例如客户,其列为 doc_number,我还有一个客户文档列表,我不知道它们是否存在于客户表中。

问题是,是否有任何简单的方法可以获取此列表中而不是表中的所有客户?

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

【问题讨论】:

  • 试着澄清你的问题

标签: mysql list conditional-statements exists


【解决方案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') 

我不会这样做并用其他语言划分列表

【讨论】:

  • 可能我不太清楚,但我没有第二张表,只有这样的文档列表(123456、1234658、145678),但要长得多!
  • 如果问题是 (123456, 1234658, 145678) 中的哪一个不在客户端表中,那么我会用您选择的编程语言在 MySQL 之外拆分列表,然后对每个数字运行 SQL 检查.可以在 MySQL 中编写一个循环遍历列表的 SQL 函数,但在外部更容易完成。
  • 这个想法是做一些更简单的事情,我可以创建一个临时表并在那里进行右外连接。但这正是我不想做的:)
  • 你在 mysql 之外使用什么编程语言?
  • 使用函数似乎是最好的解决方案,因为它可以用于其他情况。谢谢!
【解决方案2】:

您可以使用派生表:

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 ...”。

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2021-11-20
    • 2018-04-12
    • 2017-06-13
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多