我有一个由不同进程填充的sqlite数据库。此过程在数据库中生成表,并用数据填充它们。
我正在尝试对此数据库应用一组预先编写的查询,但我需要确保在运行它之前在数据库中创建查询中引用的所有表以防止错误。我试图确定在SQL中引用表的所有可能方法,以确保我涵盖所有选项。
简单:
select col1 from table1
联接:
select col1,col2 from table1 join table2 on col1 = col2
select col1,col2 from table1 left outer join table2 on col1 = col2
select col1,col2 from table1, table2 on col1 = col2
select col1,col2 from table1, table2 where col1 = col2
子查询:
select col1,(select col2 from table2 where col1 = col2) as ag2 from table1
select col1 from table1 where col1 in (select col2 from table2)
别名:
select col1,col2 from table1 t1, table2 t2 where col1 = col2
select col1,col2,col3 from table1 t1, table2 t2,table3 t3 where col1 = col2
我正在考虑使用RegEx来识别少数事件。
from [table] [alias]
join [table] [alias]
from [table] [alias], [table] [alias]
此RegEx似乎解释了大部分差异。表名出现在group2或group3中:
(from|join)\s+([\w]+)|,\s*([\w]+)\s*([\w]\s*)?(on|where)
我的问题:
如果这会影响RegEx的格式,我将在Python代码中使用它。
答案 0 :(得分:1)
您可以使用positive look-behind:
(?<=from|join)\s+(\w+)(,\s*(\w+))?(?:(\s*\w+,\s*(\w+))+)?
注意您需要正确使用分组。在您的模式中,您已在组中放置from
和join
,因此结果将包含它们。