我无法为此创建虚拟表。基本上我所拥有的是一系列价值观:
'Succinylcholine','Thiamine','Trandate','Tridol Drip'
我想知道table1
中哪些值不存在并显示它们。这可能吗?我尝试使用左连接并使用列表创建一个变量,我可以将其与表进行比较,但它返回错误的结果。
这是我尝试过的事情之一:
SET @list="'Amiodarone','Ammonia Inhalents','Aspirin';
SELECT @list FROM table1 where @list not in (
SELECT Description
FROM table1
);
答案 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) <> ''