MySQL从列表中选择所有值,而不在表中

时间:2014-12-08 20:12:59

标签: mysql sql compare

我无法为此创建虚拟表。基本上我所拥有的是一系列价值观:

'Succinylcholine','Thiamine','Trandate','Tridol Drip'

我想知道table1中哪些值不存在并显示它们。这可能吗?我尝试使用左连接并使用列表创建一个变量,我可以将其与表进行比较,但它返回错误的结果。

这是我尝试过的事情之一:

SET @list="'Amiodarone','Ammonia Inhalents','Aspirin';

SELECT @list FROM table1 where @list not in (
    SELECT Description 
    FROM table1
);

2 个答案:

答案 0 :(得分:2)

只有很小的例外情况,您需要以表格形式提供数据才能在结果集中获取这些数据。考虑到您无法创建临时表,这是解决此问题的所有尝试都遇到的基本问题。如果您确实可以以任何形式或格式(根据您的评论)提供输入,那么您可以以子查询的形式提供它:

(
  SELECT 'Amiodarone' AS description
  UNION ALL
  SELECT 'Ammonia Inhalents'
  UNION ALL
  SELECT 'Aspirin'
)

(请注意,这是我记下的最大例外情况:你可以直接选择标量,没有基表。如果你愿意,你可以明确地表达 - 至少在MySQL和Oracle中 - 通过选择{ {1}}。)

在这种情况下,这应该对你有用:

FROM DUAL

答案 1 :(得分:0)

那不会奏效。变量的内容将被视为一个整体字符串 - 一个固体字母块,而不是3个单独的逗号分隔值。查询将被解析/执行为:

SELECT ... WHERE "'Amio.....rin'" IN (x,y,z,...)
                 ^--------------^--- string

另外,既然你只是在同一张桌子上做了一个子选择,那么这种结构就没有意义了。你可以试试mysql find_in_set()函数:

SELECT @list
FROM table1
WHERE FIND_IN_SET(Description, @list) <> ''