我想在一个表的列中找到不在另一个表的列中的所有记录。我可以使用此查询执行此操作:
SELECT
kywd
FROM
from_client
WHERE
kywd NOT IN
(SELECT
kywd
FROM
from_me);
但是,我想扩展它以允许一些模式匹配。至少我想知道from_client
kywd
是否出现在from_me
kywd
的任何位置。所以,就像'%kywd%'
一样。我尝试了...... WHERE '%' || kywd || '%' NOT IN
...作为一个狂野的猜测,实际上返回了结果集,但我怀疑这种语法只是乱码。
如何让这个select语句允许这些通配符?
答案 0 :(得分:1)
SELECT from_client.kywd
FROM from_client
LEFT JOIN from_me
ON from_client.kywd LIKE '%' || from_me.kywd || '%'
WHERE from_me.kywd IS NULL
答案 1 :(得分:1)
not exists
可能比加入
select kywd
from from_client
where not exists (
select 1
from from_me
where position(from_client.kywd, kywd) > 0
)
答案 2 :(得分:0)
尝试这些方法。
SELECT
kywd
FROM
from_client
LEFT OUTER JOIN from_me ON
from_client.kywd like from_me.kywd -- replace with whatever appropriate
WHERE
from_me.some_id IS NULL
用"替换为适当的",我的意思是:
from_client.kywd LIKE '%' || from_me.kywd || '%'
或
from_me.kywd LIKE '%' || from_client.kywd || '%'
或任何其他合适的条件。
答案 3 :(得分:0)
您可以尝试使用EXCEPT语句。在你的情节中它会像
SELECT kywd
FROM from_client
--WHERE <Conditions here>
except
SELECT kywd
FROM from_me
--WHERE <Conditions here>
并返回from_me中不存在的from_client中存在的内容。