我正在开发一个使用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%'