在多个表中查询相似的文本字符串



我正在开发一个使用Postgres作为数据库的应用程序。我现在需要查询包含在多个表甚至多个数据库中的数据。

我还在学习PostgreSQL查询的语法,所以希望这个问题的结构正确。

我想在两个表中查询包含在特定列中的文本字符串。在下面的示例代码中,我试图在表_1和表_2中查询水果名称"apple"或类似于"apple"的水果名称,如"crabapple"我希望其中一个字符串是松散的,另一个是明确的。

我可以单独查询每个表,但如何交叉引用两个表中的"水果名称"以获得相似性?

SELECT * FROM good_fruits where fruit_name ILIKE '%apple%'
SELECT * FROM bad_fruits where fruit_name ILIKE '%apple%'

我尝试过使用下面的查询做类似的事情,但它不起作用
查询应如何构造为在名为fruit_name的单列中查询两个表中的相似文本?

select 
good_fruits.bar_code,
good_fruits.fruit_name, 
bad_fruits.fruit_name
from good_fruits full outer join bad_fruits
on good_fruits.fruit_name=bad_fruits.fruit_name 
WHERE good_fruits.fruit_name IS NOT NULL 
and bad_fruits.fruit_name IS NOT NULL
and good_fruits.fruit_name ILIKE '%apple%'
and bad_fruits.fruit_name ILIKE '%apple%'

我计划使用带有psycopg2模块的Python脚本进行此查询。返回的结果应该是:

good_fruits.barcode, good_fruits.fruit_name, bad_fruits.fruit_name

如果我理解正确,您只需要为输出列提供假名:

select 
good_fruits.bar_code as "good_fruits.bar_code",
good_fruits.fruit_name as "good_fruits.fruit_name", 
bad_fruits.fruit_name as "bad_fruits.fruit_name"
from good_fruits full outer join bad_fruits
on good_fruits.fruit_name=bad_fruits.fruit_name 
WHERE good_fruits.fruit_name IS NOT NULL 
and bad_fruits.fruit_name IS NOT NULL
and good_fruits.fruit_name ILIKE '%apple%'
-- and bad_fruits.fruit_name ILIKE '%apple%' -- you can omit this condition

您也可以通过为表名提供假名来缩短这一点:

select 
g.bar_code as "good_fruits.bar_code",
g.fruit_name as "good_fruits.fruit_name", 
b.fruit_name as "bad_fruits.fruit_name"
from 
good_fruits g
full outer join bad_fruits b
on g.fruit_name=b.fruit_name 
WHERE g.fruit_name IS NOT NULL 
and b.fruit_name IS NOT NULL
and g.fruit_name ILIKE '%apple%'

最新更新