一次查询多个表

时间:2015-09-16 11:13:32

标签: sql postgresql

假设我有许多具有不同结构的表,这些表具有公共列。如何根据条件查询所有这些表中的所有行。

示例:

table1:
column1 | column2 | user_id

table2:
columna | columnb | columnc | user_id

...

条件是user_id = <some number>。我不想单独查询每个表,因为大约有30个表。每个表中的每个user_id可能没有记录。这样做的最佳选择是什么?

4 个答案:

答案 0 :(得分:0)

您可以在user_id上加入表格。 内部联接会很好。 你必须设置primarykeys和foreignkeys

答案 1 :(得分:0)

如果表之间有关系或共同列;与发布的案例user_id一样,您可以执行简单的JOIN

select t1.*, t2.*
from table1 t1 join table2 t2 on t1.user_id = t2.user_id
where user_id = <some number>;

但是如果没有关系存在(或)你就无法加入它们,那么除了单独查询它们之外别无他法。

答案 2 :(得分:0)

听起来好像在寻找private void Save_btn_Click(object sender, RoutedEventArgs e) { try { Products product = new Products(); product.DatePicker = Date_Picker.Text; product.Name = Product_Name.Text; product.Category = Cat.Text; product.Volume = Vol.Text; product.VolUnit = VolUnit.Text; product.Quantity = Quantity.Text; product.PurPrice = Pur_Price.Text; product.SellPrice = Sell_Price.Text; SaveXML.SaveData(product, "Data.xml"); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } } private void Main_Loaded(object sender, RoutedEventArgs e) { if (File.Exists("Data.xml")) { XmlSerializer xs = new XmlSerializer(typeof(Products)); FileStream read = new FileStream("Data.xml", FileMode.Open, FileAccess.Read, FileShare.Read); Products product = (Products)xs.Deserialize(read); } }

full outer join

select * from ( select * from table1 t1 full outer join table2 t2 using (user_id) full outer join table3 t2 using (user_id) ) t where user_id = 42; 语法将确保公共列using (user_id)仅在结果中出现一次。因此,即使查询使用user_id,结果中也只会有一个select *列,您可以在其中应用user_id条件。

答案 3 :(得分:0)

我认为在这种情况下,外连接将服务于目的而不是内连接,因为每个表中的每个user_id可能没有记录。

另一方面,我强烈认为加入多个表(特别是30个)会导致表“锁定”更长的时间,这会妨碍您的数据库以及您的应用程序。 DB的重构可以是一个选项但是如果你不能改变它,可以制作类似数据的集群,一次可以有4-5个表数据,意味着总共6-7个查询,使用应用程序端的多线程,因为每个线程都会抢夺针对其各自查询的数据,将它们聚集在一起以创建所需信息集。这将提高您的应用程序性能。