多组合的
13 个解决方案
#1
???
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)
#2
这问题,表结构都不知道,怎么关联
主表是订单表,然后通过订单id和订单明细表关联
然后订单明细和商品表 地址表 客户表关联
主表是订单表,然后通过订单id和订单明细表关联
然后订单明细和商品表 地址表 客户表关联
#3
不要写重复就可以,
如
Table1 :A11 字段
Table2 :A21 字段
Table3 :A31 字段
Table4 :A41 字段
Table5 :A51 字段
互相相等, 则
where Table1.A11=table2.A21
and Table2.A21=table3.A31
and table3.A31=table4.A41
and table4.A41=table5.A51
如
Table1 :A11 字段
Table2 :A21 字段
Table3 :A31 字段
Table4 :A41 字段
Table5 :A51 字段
互相相等, 则
where Table1.A11=table2.A21
and Table2.A21=table3.A31
and table3.A31=table4.A41
and table4.A41=table5.A51
#4
用多表查询,
需要什么条件就加什么条件咯。 。
需要什么条件就加什么条件咯。 。
#5
你把你写的语句发出来。
#6
先筛选条件,然后再连接
#7
SQL执行时是先根据模糊的查询(比如 like between等)确定范围,再用精确查找匹配。,你要先查订单信息表,然后根据订单信息表的外键查其他几个表
#8
用视图效率会好一些,如果是多条件筛选数据最多的条件放在最后面,具体还有看表结构
#9
public DataSet GetTheOrderInfo(string strWhere)
{
StringBuilder strSql = new StringBuilder();
//现在的OrderDetail.GoodsId = Goods.Id
//查询的订单表字段
strSql.Append("SELECT [Order].OrderId, [Order].CustomerId, [Order].BuyerPayable, [Order].BuyerPostage,[Order].Sum, [Order].OrderState, [Order].OrderCreateTime, [Order].OrderPayTime,[Order].TransportId, [Order].OrderRemark, [Order].SignId, [Order].PayCode,[Order].PayType, [Order].BuyerMessage,");
//查询的客户表的字段
strSql.Append("Customer.webName, Customer.NickName,Customer.City,Customer.Mail,");
//查询的客户地址的字段
strSql.Append("Address.PostCode, Address.ReceiverAddress, Address.ActivityAddress.ReceiverPhone,Address.ReceiverName,");
//查询的订单详细表的字段
strSql.Append("OrderDetail.GoodsId, OrderDetail.Num, OrderDetail.Price,OrderDetail.Discount,");
//查询的商品表的字段
strSql.Append("Goods.GoodsName, Goods.ProduceId");
//表之间的对应关系
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
//传进来的查询条件
if (strWhere != "")
{
strSql.Append(" where " +strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
}
这是我的查询的函数
然后 -在有一个函数调用并 给他 where 条件 但是 where 条件是 不固定的 有可能是上面 表的 某个字段 或是多个字段的 组合 。所以我的 调用他的函数怎么写。where 条件怎么写 。。。
{
StringBuilder strSql = new StringBuilder();
//现在的OrderDetail.GoodsId = Goods.Id
//查询的订单表字段
strSql.Append("SELECT [Order].OrderId, [Order].CustomerId, [Order].BuyerPayable, [Order].BuyerPostage,[Order].Sum, [Order].OrderState, [Order].OrderCreateTime, [Order].OrderPayTime,[Order].TransportId, [Order].OrderRemark, [Order].SignId, [Order].PayCode,[Order].PayType, [Order].BuyerMessage,");
//查询的客户表的字段
strSql.Append("Customer.webName, Customer.NickName,Customer.City,Customer.Mail,");
//查询的客户地址的字段
strSql.Append("Address.PostCode, Address.ReceiverAddress, Address.ActivityAddress.ReceiverPhone,Address.ReceiverName,");
//查询的订单详细表的字段
strSql.Append("OrderDetail.GoodsId, OrderDetail.Num, OrderDetail.Price,OrderDetail.Discount,");
//查询的商品表的字段
strSql.Append("Goods.GoodsName, Goods.ProduceId");
//表之间的对应关系
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
//传进来的查询条件
if (strWhere != "")
{
strSql.Append(" where " +strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
}
这是我的查询的函数
然后 -在有一个函数调用并 给他 where 条件 但是 where 条件是 不固定的 有可能是上面 表的 某个字段 或是多个字段的 组合 。所以我的 调用他的函数怎么写。where 条件怎么写 。。。
#10
你最好这样写:
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
后面
strSql.Append("where 1=1 ")
传递where 条件的时候
stringBuilder build = new stringBuilder();
build.Append(" And Order.CustomerId=1");
build.Append(" And OrderDetail.OrderId =2");
strWhere = build.ToString();
然后传递 strWhere
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
后面
strSql.Append("where 1=1 ")
传递where 条件的时候
stringBuilder build = new stringBuilder();
build.Append(" And Order.CustomerId=1");
build.Append(" And OrderDetail.OrderId =2");
strWhere = build.ToString();
然后传递 strWhere
#11
1、能筛选掉很多数据的条件放在前面
2、使用左/右连接
2、使用左/右连接
#12
根据条件判断来拼接字符串呗,用StringBuilder,效率高
#13
用in 或者exist子句先取得结果,再进行一张表的记录的筛选,即查询优化课题,
#1
???
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)
#2
这问题,表结构都不知道,怎么关联
主表是订单表,然后通过订单id和订单明细表关联
然后订单明细和商品表 地址表 客户表关联
主表是订单表,然后通过订单id和订单明细表关联
然后订单明细和商品表 地址表 客户表关联
#3
不要写重复就可以,
如
Table1 :A11 字段
Table2 :A21 字段
Table3 :A31 字段
Table4 :A41 字段
Table5 :A51 字段
互相相等, 则
where Table1.A11=table2.A21
and Table2.A21=table3.A31
and table3.A31=table4.A41
and table4.A41=table5.A51
如
Table1 :A11 字段
Table2 :A21 字段
Table3 :A31 字段
Table4 :A41 字段
Table5 :A51 字段
互相相等, 则
where Table1.A11=table2.A21
and Table2.A21=table3.A31
and table3.A31=table4.A41
and table4.A41=table5.A51
#4
用多表查询,
需要什么条件就加什么条件咯。 。
需要什么条件就加什么条件咯。 。
#5
你把你写的语句发出来。
#6
先筛选条件,然后再连接
#7
SQL执行时是先根据模糊的查询(比如 like between等)确定范围,再用精确查找匹配。,你要先查订单信息表,然后根据订单信息表的外键查其他几个表
#8
用视图效率会好一些,如果是多条件筛选数据最多的条件放在最后面,具体还有看表结构
#9
public DataSet GetTheOrderInfo(string strWhere)
{
StringBuilder strSql = new StringBuilder();
//现在的OrderDetail.GoodsId = Goods.Id
//查询的订单表字段
strSql.Append("SELECT [Order].OrderId, [Order].CustomerId, [Order].BuyerPayable, [Order].BuyerPostage,[Order].Sum, [Order].OrderState, [Order].OrderCreateTime, [Order].OrderPayTime,[Order].TransportId, [Order].OrderRemark, [Order].SignId, [Order].PayCode,[Order].PayType, [Order].BuyerMessage,");
//查询的客户表的字段
strSql.Append("Customer.webName, Customer.NickName,Customer.City,Customer.Mail,");
//查询的客户地址的字段
strSql.Append("Address.PostCode, Address.ReceiverAddress, Address.ActivityAddress.ReceiverPhone,Address.ReceiverName,");
//查询的订单详细表的字段
strSql.Append("OrderDetail.GoodsId, OrderDetail.Num, OrderDetail.Price,OrderDetail.Discount,");
//查询的商品表的字段
strSql.Append("Goods.GoodsName, Goods.ProduceId");
//表之间的对应关系
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
//传进来的查询条件
if (strWhere != "")
{
strSql.Append(" where " +strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
}
这是我的查询的函数
然后 -在有一个函数调用并 给他 where 条件 但是 where 条件是 不固定的 有可能是上面 表的 某个字段 或是多个字段的 组合 。所以我的 调用他的函数怎么写。where 条件怎么写 。。。
{
StringBuilder strSql = new StringBuilder();
//现在的OrderDetail.GoodsId = Goods.Id
//查询的订单表字段
strSql.Append("SELECT [Order].OrderId, [Order].CustomerId, [Order].BuyerPayable, [Order].BuyerPostage,[Order].Sum, [Order].OrderState, [Order].OrderCreateTime, [Order].OrderPayTime,[Order].TransportId, [Order].OrderRemark, [Order].SignId, [Order].PayCode,[Order].PayType, [Order].BuyerMessage,");
//查询的客户表的字段
strSql.Append("Customer.webName, Customer.NickName,Customer.City,Customer.Mail,");
//查询的客户地址的字段
strSql.Append("Address.PostCode, Address.ReceiverAddress, Address.ActivityAddress.ReceiverPhone,Address.ReceiverName,");
//查询的订单详细表的字段
strSql.Append("OrderDetail.GoodsId, OrderDetail.Num, OrderDetail.Price,OrderDetail.Discount,");
//查询的商品表的字段
strSql.Append("Goods.GoodsName, Goods.ProduceId");
//表之间的对应关系
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
//传进来的查询条件
if (strWhere != "")
{
strSql.Append(" where " +strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
}
这是我的查询的函数
然后 -在有一个函数调用并 给他 where 条件 但是 where 条件是 不固定的 有可能是上面 表的 某个字段 或是多个字段的 组合 。所以我的 调用他的函数怎么写。where 条件怎么写 。。。
#10
你最好这样写:
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
后面
strSql.Append("where 1=1 ")
传递where 条件的时候
stringBuilder build = new stringBuilder();
build.Append(" And Order.CustomerId=1");
build.Append(" And OrderDetail.OrderId =2");
strWhere = build.ToString();
然后传递 strWhere
strSql.Append("FROM [Order] INNER JOIN Customer ON [Order].CustomerId = Customer.CustomerId INNER JOIN Address ON [Order].AddressId = Address.Id INNER JOIN OrderDetail ON [Order].OrderId = OrderDetail.OrderId INNER JOIN Goods ON OrderDetail.GoodsId = Goods.Id");
后面
strSql.Append("where 1=1 ")
传递where 条件的时候
stringBuilder build = new stringBuilder();
build.Append(" And Order.CustomerId=1");
build.Append(" And OrderDetail.OrderId =2");
strWhere = build.ToString();
然后传递 strWhere
#11
1、能筛选掉很多数据的条件放在前面
2、使用左/右连接
2、使用左/右连接
#12
根据条件判断来拼接字符串呗,用StringBuilder,效率高
#13
用in 或者exist子句先取得结果,再进行一张表的记录的筛选,即查询优化课题,