多条件组合查询的 where 条件怎么写最方便最有效率

时间:2020-12-31 00:48:20
。我有 五个表 一个是 商品表 订单表 订单详细表 地址表 客户表 当我查询 订单信息的时候 这几个表中都有相互关联的字段。然后取出来 所有的信息。我该怎么写 条件 成了关键问题。
多组合的

13 个解决方案

#1


???
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)

#2


这问题,表结构都不知道,怎么关联

主表是订单表,然后通过订单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


#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 条件怎么写 。。。

#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

#11


1、能筛选掉很多数据的条件放在前面
2、使用左/右连接

#12


根据条件判断来拼接字符串呗,用StringBuilder,效率高

#13


用in 或者exist子句先取得结果,再进行一张表的记录的筛选,即查询优化课题,

#1


???
a.col1=b.col2 and c.col3=0 or (d.col1=c.col8 or e.col16=88888)

#2


这问题,表结构都不知道,怎么关联

主表是订单表,然后通过订单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


#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 条件怎么写 。。。

#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

#11


1、能筛选掉很多数据的条件放在前面
2、使用左/右连接

#12


根据条件判断来拼接字符串呗,用StringBuilder,效率高

#13


用in 或者exist子句先取得结果,再进行一张表的记录的筛选,即查询优化课题,