我正在使用将Postgres用于数据库的应用程序。我正要查询多个表甚至多个数据库中包含的数据。
我仍在学习PostgreSQL查询的语法,因此希望这个问题的结构正确。
我想查询2个表以查找特定列中包含的文本字符串。 在示例代码中,下面我尝试在table_1和table_2中查询水果名称“ apple”或类似于“ apple”的水果名称,例如“ crabapple”。我希望其中一个字符串是宽松的而另一个字符串是明确的。
我可以分别查询每个表,但是如何针对两个表交叉引用'fruit_name'?
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
答案 0 :(得分:1)
如果我理解正确,则只需为输出列提供假名:
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%'