假设我有许多具有不同结构的表,这些表具有公共列。如何根据条件查询所有这些表中的所有行。
示例:
table1:
column1 | column2 | user_id
table2:
columna | columnb | columnc | user_id
...
条件是user_id = <some number>
。我不想单独查询每个表,因为大约有30个表。每个表中的每个user_id
可能没有记录。这样做的最佳选择是什么?
答案 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个查询,使用应用程序端的多线程,因为每个线程都会抢夺针对其各自查询的数据,将它们聚集在一起以创建所需信息集。这将提高您的应用程序性能。